Popen
을 사용하여 프로세스를 생성하려고 시도하고 특정 문자열을 stdin
에 보내려고합니다.Popen.communicate가 stdin에 보내는 문자열을 이스케이프 처리합니다.
나는이 :
pipe = subprocess.Popen(cmd, shell=True, stdin=subprocess.PIPE)
pipe.communicate(my_stdin_str.encode(encoding='ascii'))
pipe.stdin.close()
그러나, 두 번째 줄은 실제로 my_stdin_str
의 공백을 이스케이프합니다. 예를 들어 내가 가지고있는 경우 :
my_stdin_str="This is a string"
프로세스가 표시됩니다
This\ is\ a\ string
가 어떻게이 문제를 방지 할 수 있습니까?
'bash'에'cmd = 'cat' '을 사용하여 코드를 실행하면'cat'은'\'을 출력하지 않습니다. 어떤 쉘을 사용하고 있습니까? 'cmd'가 무엇인지 말해 줄 수 있습니까? @ BrianCain의 제안으로 문제가 해결 되었습니까? –
프로그램에서 문자열의 이스케이프 된 버전을 인쇄하지 않는 것이 확실합니까? 파이썬은 여기서 벗어날 수 없다고 확신합니다. – mata
당신은'pipe.stdin.close()'가 필요 없습니다. 'pipe.communicate()'는 stdin을 단독으로 닫아야한다. – jfs