我创建了一个 Subprocess 对象。子进程调用一个 shell,我需要将下面提供的 shell 命令发送给它。我试过的代码:
from subprocess import Popen, PIPE
p = Popen(["code.exe","25"],stdin=PIPE,stdout=PIPE,stderr=PIPE)
print p.communicate(input='ping 8.8.8.8')
该命令不执行,没有任何内容输入到 shell 中。提前致谢。
我创建了一个 Subprocess 对象。子进程调用一个 shell,我需要将下面提供的 shell 命令发送给它。我试过的代码:
from subprocess import Popen, PIPE
p = Popen(["code.exe","25"],stdin=PIPE,stdout=PIPE,stderr=PIPE)
print p.communicate(input='ping 8.8.8.8')
该命令不执行,没有任何内容输入到 shell 中。提前致谢。
如果我模拟code.exe来读取arg然后处理stdin:
#!/usr/bin/env bash
echo "arg: $1"
echo "stdin:"
while read LINE
do
echo "$LINE"
done < /dev/stdin
并稍微更新您的代码:
import os
from subprocess import Popen, PIPE
cwd = os.getcwd()
exe = os.path.join(cwd, 'foo.sh')
p = Popen([exe, '25'], stdin=PIPE, stdout=PIPE, stderr=PIPE)
out, err = p.communicate(input='aaa\nbbb\n')
for line in out.split('\n'):
print(line)
然后生成的进程输出:
arg: 25
stdin:
aaa
bbb
如果输入更改没有\n
虽然:
out, err = p.communicate(input='aaa')
然后它不会出现:
arg: 25
stdin:
Process finished with exit code 0
因此,您可能需要仔细查看管道两端之间的协议。例如,这可能就足够了:
input='ping 8.8.8.8\n'
希望有帮助。