Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/332.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
写入Python子进程';s stdin不带通信();s阻塞行为_Python_Linux_Subprocess_Blocking - Fatal编程技术网

写入Python子进程';s stdin不带通信();s阻塞行为

写入Python子进程';s stdin不带通信();s阻塞行为,python,linux,subprocess,blocking,Python,Linux,Subprocess,Blocking,如何使这成为一个非阻塞呼叫osd_cat仅作为需要p.communicate()的管道接受输入。调用使进程阻塞。在Popen中设置stdin还有其他方法吗 p = subprocess.Popen(('osd_cat', '-d', '{}'.format(interval)), stdin=subprocess.PIPE) p.communicate(message

如何使这成为一个非阻塞呼叫
osd_cat
仅作为需要
p.communicate()的
管道接受输入。
调用使进程阻塞。在
Popen
中设置
stdin
还有其他方法吗

p = subprocess.Popen(('osd_cat',
                      '-d',
                      '{}'.format(interval)),
                     stdin=subprocess.PIPE)
p.communicate(message)
就向流程发送数据而言,该方法是一次性交易


相反,直接写信给。如果想要获得输出,可以从中读取行。在尝试读取之前,请确保将stdout=subprocess.PIPE传递给构造函数。

使用Python多处理,并将子任务放在其他进程中。使用消息队列与它对话。Waitaminute,您所关注的是如何向
stdin
?在提问之前,您是否尝试过
p.stdin.write()
?(是的,您希望在一个单独的线程中执行此操作,以防止在主进程中阻塞,但这是线程的一部分好处)。当您传递字符串时,为什么
p.communicate
会阻塞?它可能会在内部关闭管道,因为我们正在传递一根绳子。对吗?@Jean。这正是它设计和记录的目的。它可以选择发送单个字符串,然后等待进程关闭其标准输出(通常通过终止)。除了这是使用流程的一种非常常见的方式之外,没有什么特别重要的原因。也许是名字的选择让人困惑?