我正在尝试使用Popen
生成一个流程,并将特定字符串发送到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
如何防止此行为?
答案 0 :(得分:3)
我无法在Ubuntu上重现它:
from subprocess import Popen, PIPE
shell_cmd = "perl -pE's/.\K/-/g'"
p = Popen(shell_cmd, shell=True, stdin=PIPE)
p.communicate("This $PATH is a string".encode('ascii'))
在这种情况下,shell=True
是不必要的:
from subprocess import Popen, PIPE
cmd = ["perl", "-pE" , "s/.\K/-/g"]
p = Popen(cmd, stdin=PIPE)
p.communicate("This $PATH is a string".encode('ascii'))
两者产生相同的输出:
T-h-i-s- -$-P-A-T-H- -i-s- -a- -s-t-r-i-n-g-
答案 1 :(得分:0)
除非您因某些原因知道自己需要它,否则不要使用" shell = True"一般来说(没有测试,听起来像是在这里发生的事情)。