parent.py
:
import subprocess
import sys
p = subprocess.Popen([sys.executable, 'sub.py'], stdin=subprocess.PIPE)
p.stdin.write('foo') # not even a newline seems to be required for this to work, oddly
# p.stdin.flush() # optional; seems like not required
_, _ = p.communicate() # this is required--otherwise it just seems to block
sub.py
:
print raw_input()
然后运行parent.py
输出foo
如预期。
如果你关心的communicate()
的返回值,只是out, err
替换_, _
(或如out, _
,如果你只关心STDOUT);我只是想用_
来标记未使用的变量,尽管可以简单地完全忽略communicate()
的返回值...但是看起来像communicate
什么也没有返回。
参见:http://docs.python.org/2/library/subprocess.html#subprocess.Popen.communicate
UPDATE:
看起来你也可以直接:
p = subprocess.Popen([sys.executable, 'sub.py'], stdin=subprocess.PIPE)
_, _ = p.communicate(input='foo')
'print'写入'sys.stdout',是*声明*,你不能在表达式中使用它。只需直接写*字符串*而不打印。 –
是的,要更明确地改变你的代码:'p.stdin.write(“sometext”+“\ xhh \ xhh \ xhh \ xhh”)' –
啊。我写错了代码。我在写'p.stdin.write(“text”+“\ xhh”)''。那么,它应该像那样工作?明天我会重新调查。谢谢您的帮助。 –