python:proc.com通信挂起

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':

我正在尝试用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()”
只在第一次工作,因为脚本没有结束。

请参阅以获取灵感。对于您的情况,您应该不要使用
通信
,而是使用
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')
哇,我一直都在关注主脚本,我还没有真正想过它,谢谢你