相关疑难解决方法(0)

python中subprocess.PIPE上的非阻塞读取

我正在使用子进程模块启动子进程并连接到它的输出流(stdout).我希望能够在其标准输出上执行非阻塞读取.有没有办法让.readline非阻塞或在我调用之前检查流上是否有数据.readline?我希望这是可移植的,或至少在Windows和Linux下工作.

这是我现在如何做到的(.readline如果没有数据可用,则阻止它):

p = subprocess.Popen('myprogram.exe', stdout = subprocess.PIPE)
output_str = p.stdout.readline()
Run Code Online (Sandbox Code Playgroud)

python io subprocess nonblocking

477
推荐指数
15
解决办法
21万
查看次数

使用Popen.stdin执行多个命令

我想在使用管道从python脚本启动的独立应用程序中执行多个命令.我能够可靠地将命令传递给程序的stdin的唯一方法是使用Popen.communicate,但它会在命令执行后关闭程序.如果我使用Popen.stdin.write而不是命令只执行5次左右,那么它就不可靠.我究竟做错了什么?

详细说明:

我有一个应用程序,它监听stdin的命令并逐行执行它们.我希望能够运行应用程序并根据用户与GUI的交互向其传递各种命令.这是一个简单的测试示例:

import os, string
from subprocess import Popen, PIPE

command = "anApplication" 
process = Popen(command, shell=False, stderr=None, stdin=PIPE)

process.stdin.write("doSomething1\n")
process.stdin.flush()
process.stdin.write("doSomething2\n")
process.stdin.flush()
Run Code Online (Sandbox Code Playgroud)

我希望看到两个命令的结果,但我没有得到任何回应.(如果我多次执行其中一条Popen.write行,它偶尔会有效.)

如果我执行:

process.communicate("doSomething1")
Run Code Online (Sandbox Code Playgroud)

它完美地工作但应用程序终止.

python popen

19
推荐指数
1
解决办法
1万
查看次数

使用子进程多次通信

我正在尝试将输入传递给在Python中作为子进程打开的程序.使用communic()做我想要的,但它只执行一次,然后在允许继续之前等待子进程终止.

是否存在类似于功能中的communic()的方法或模块,但是允许与子进程进行多次通信?

这是一个例子:

import subprocess

p = subprocess.Popen('java minecraft_server.jar',
                 shell=True,
                 stdin=subprocess.PIPE);

//Pipe message to subprocess' console here

//Do other things

//Pipe another message to subprocess' console here
Run Code Online (Sandbox Code Playgroud)

如果这可以在不使用子进程的情况下以更简单的方式完成,那也会很棒.

python subprocess communication

6
推荐指数
1
解决办法
2312
查看次数

在Python中与子进程多次通信

这个问题不是重复的

与一个进程进行多次通信而不破坏管道?

这个问题得到了解决,因为它的用例允许输入一起发送,但如果您的程序是交互式的(如此处的用例所示),则情况并非如此。


文件subprocess.Popen说:

communicate(input=None)
    Interact with process: Send data to stdin.  Read data from stdout
    and stderr, until end-of-file is reached.  Wait for process to
    terminate.  ...
Run Code Online (Sandbox Code Playgroud)

是否可以在子进程终止之前与子进程进行多次通信,例如与终端或网络套接字?

例如,如果子进程是bc,则父进程可能希望根据需要向其发送不同的输入以进行计算。由于发送到的输入bc可能取决于用户输入,因此不可能一次发送所有输入。

python ipc

6
推荐指数
1
解决办法
3860
查看次数

标签 统计

python ×4

subprocess ×2

communication ×1

io ×1

ipc ×1

nonblocking ×1

popen ×1