我想在我的主python程序中使用子进程打开一个Python脚本。我希望这两个程序能够彼此聊天,因为它们都在运行,所以我可以监视从脚本中的活动,即我需要它们在彼此之间发送字符串。使用子进程PIPE在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将字符串“开始\ n”
- 脚本2读取此字符串和发送串“准备好进行数据”
- 脚本1读取这个串和酸洗数据发送到脚本2
- 然后无论...
主要问题是如何做2-4部分。然后,两个脚本之间的其他通信应该遵循。到目前为止,我只能在脚本2被终止后才能读取这些字符串。
任何帮助,非常感谢。
UPDATE:
脚本1必须使用32位Python中运行,而脚本2必须使用64位的Python运行。
您可以使用[multiprocessing模块](http://docs.python.org/3/library/multiprocessing.html),它被设计成在supbrocesses中运行python – Mark 2013-03-13 21:36:27
我之所以使用子进程是因为我需要使用64位Python运行第二个脚本,而主脚本运行在32位Python中。这是一个驱动程序问题。我不认为多处理允许这样做。 – Mink 2013-03-13 21:39:35
我想我有一个类似的问题,在python中运行一个线程池,每个线程都与某个node.js工作程序“通信” - 对我来说什么工作是在每个write()之后flush()'stdout,否则,缓冲推迟了一切,直到溪流关闭。 – nvlass 2013-03-13 21:49:07