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」)''。那麼,它應該像那樣工作?明天我會重新調查。謝謝您的幫助。 –