python:proc.com通信挂起
我正在尝试用python启动另一个脚本,然后回答输入问题,这是主脚本:python:proc.com通信挂起,python,subprocess,Python,Subprocess,我正在尝试用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':
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()”
只在第一次工作,因为脚本没有结束。请参阅以获取灵感。对于您的情况,您应该不要使用通信,而是使用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'
看看有没有灵感。对于您的情况,您应该不要使用通信,而是使用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'
谢谢,但输出仅为:b'正在加载…\r\n'正在发送数据。。。完成似乎cmd.stdout.readline()只在您第一次被卡住时才起作用,因为ciao.py
在os.system('mkdir'…)
由于“文件存在”错误而失败时出错。试着把它放在一个if
语句中,例如if not os.path.exists('okfunziona'):os.system('mkdir-okfunziona')
哇,我一直都在关注主脚本,我还没有真正想过它,谢谢你,但输出只是:b'加载…\r\n'发送数据。。。完成似乎cmd.stdout.readline()只在您第一次被卡住时才起作用,因为ciao.py
在os.system('mkdir'…)
由于“文件存在”错误而失败时出错。试着把它放在一个if
语句中,例如if不是os.path.exists('okfunziona'):os.system('mkdir-okfunziona')
哇,我一直都在关注主脚本,我还没有真正想过它,谢谢你