1

を使用してプロセスを生成しPopen、特定の文字列をその に送信しようとしていますstdin

私は持っている:

pipe = subprocess.Popen(cmd, shell=True, stdin=subprocess.PIPE)
pipe.communicate( my_stdin_str.encode(encoding='ascii') )
pipe.stdin.close()

ただし、実際には 2 行目で空白をエスケープしていますmy_stdin_str。たとえば、私が持っている場合:

my_stdin_str="This is a string"

プロセスは次のように表示されます。

This\ is\ a\ string

どうすればこの動作を防ぐことができますか?

4

2 に答える 2

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-
于 2012-11-06T22:27:54.810 に答える
0

なんらかの理由でそれが必要であることがわかっている場合を除き、通常は "shell=True" で実行しないでください (テストを行わないと、ここで何が起こっているかのように聞こえます)。

于 2012-11-06T23:20:59.220 に答える