我试图在python中启动另一个脚本然后给出输入答案,这是主脚本:
import subprocess
import sys
import platform
cmdline = ['py', 'ciao.py']
cmd = subprocess.Popen(cmdline, stdin=subprocess.PIPE, stdout=subprocess.PIPE)
for line in cmd.stdout:
if line == b'Loading...\r\n':
print("sending data...")
cmd.communicate(b"test\n")[0]
print("done")
print(line)
print(line)
这是 ciao.py :
import os
import re
import time
print("Loading...")
ciao = input("> ")
print(ciao)
os.system("mkdir okfunziona")
print("Done")
while 1:
time.sleep(10)
主脚本设法发送"test"
,但随后挂起并且不会将"done"
打印到控制台。
问题出现在Windows和Linux上。
-------------------------------------------- - - - - - - - - - -编辑 - - - - - - - - - - - - - - - --------------------------------
好的,我已经测试了Ashish Nitin Patil的示例,但我看到b'Loading...\r\n'
输出,我看不到辅助脚本的其他输出,如">"
或"Done"
,似乎"cmd.stdout.readline ()"
仅在第一次起作用,因为脚本没有结束。
答案 0 :(得分:2)
请参阅this answer (and others on that question)获取灵感。对于您的情况,您应该不使用communicate
,而是使用stdin.write
和stdout.readline
。
您的主要脚本可能如下所示 -
while True:
line = cmd.stdout.readline()
print(line)
if line.strip() == b'Loading...':
print("sending data...")
cmd.stdin.write(b"test\n")
cmd.stdin.close()
print("done")
elif line.strip() == b'Done':
break
输出 -
b'Loading...\n'
sending data...
5
done
b'> test\n'
b'Done\n'