【发布时间】:2013-03-02 01:20:11
【问题描述】:
我想在我的主 python 程序中使用子进程打开一个 Python 脚本。我希望这两个程序能够在它们都在运行时相互聊天,这样我就可以监控从脚本中的活动,即我需要它们在彼此之间发送字符串。
主程序将有一个类似的功能,将与从属脚本进行通信和监控:
脚本 1
import subprocess
import pickle
import sys
import time
import os
def communicate(clock_speed, channel_number, frequency):
p = subprocess.Popen(['C:\\Python27\\pythonw','test.py'], stdin=subprocess.PIPE, stdout=subprocess.PIPE)
data = pickle.dumps([clock_speed, channel_number, frequency]).replace("\n", "\\()")
print data
p.stdin.write("Start\n")
print p.stdout.read()
p.stdin.write(data + "\n")
p.poll()
print p.stdout.readline()
print "return:" + p.stdout.readline()
#p.kill()
if __name__ == '__main__':
print "GO"
communicate(clock_speed = 400, channel_number = 0, frequency = 5*1e6)
test.py 脚本如下所示:
脚本 2
import ctypes
import pickle
import time
import sys
start = raw_input("")
sys.stdout.write("Ready For Data")
data = raw_input("")
data = pickle.loads(data.replace("\\()", "\n"))
sys.stdout.write(str(data))
###BUNCH OF OTHER STUFF###
我希望这些脚本执行以下操作:
- 脚本 1 使用 Popen 打开脚本 2
- 脚本 1 发送字符串“Start\n”
- 脚本 2 读取此字符串并发送字符串“Ready For Data”
- 脚本 1 读取此字符串并将腌制数据发送到脚本 2
- 那么无论如何...
主要问题是如何做第 2-4 部分。然后应该遵循两个脚本之间的其余通信。到目前为止,我只能在脚本 2 终止后读取字符串。
非常感谢任何帮助。
更新:
脚本 1 必须使用 32 位 Python 运行,而脚本 2 必须使用 64 位 Python 运行。
【问题讨论】:
-
你能用multiprocessing module 来在supbrocesses中运行python吗
-
我之所以使用子进程是因为我需要第二个脚本使用 64 位 Python 运行,而主脚本在 32 位 Python 中运行。这是驱动程序问题。我不认为多处理允许这样做。
-
我认为我在 python 中运行的线程池和每个线程与一些 node.js 工作人员“通信”时遇到了类似的问题——对我有用的是
flush()每个@987654326 之后的标准输出@ 否则,缓冲会延迟所有内容,直到流关闭。 -
它允许调用其他机器所以可能docs.python.org/2/library/…
标签: python subprocess stdout stdin