我有一个jython服务器脚本(称为rajant_server.py),它与java api文件进行交互以通过特殊网络无线电进行通信。我有一个作为客户端的Python程序(还有其他一些功能)。目前,我必须通过打开命令/终端窗口,输入第一个启动服务器:使用子进程模块从python启动jython程序?
cd [path to directory containing rajant_server.py
jython rajant_server.py
一旦服务器成功连接它等待客户端,这是我通过运行开始:
cd [path to directory containing python client program]
python main.py
当客户端连接时,服务器在其命令/终端窗口中输出信息(当前用于调试),客户端程序在其命令/终端窗口中输出调试信息。 我想要做的是通过使用子进程模块从我的'main.py'程序中调用jython来消除复杂的进程。
的问题是双重的:
1 - 我需要rajant_server.py程序在它自己的终端/命令窗口中打开
2 - Jython的需求在目录中运行,其中rajant_server .py文件存储,换句话说,键入以下到命令/终端窗口不起作用(不要问我为什么):
jython C:/code_dir/comm/server/rajant_server.py
但:
cd C:/code_dir/comm/server
jython rajant_server.py
确实有效。
好吧......我刚刚有一些工作。这看起来有点像黑客,所以我仍然喜欢更好的方法。这是我目前在做什么:
serverfile = r'rajant_server_v2.py'
serverpath = os.path.join(os.path.realpath('.'),'Comm',serverfile)
serverpath = os.path.normpath(serverpath)
[path,file] = os.path.split(serverpath)
command = '/C jython '+file+'\n'
savedir = os.getcwd()
os.chdir(path)
rajantserver = subprocess.Popen(["cmd",command],\
creationflags = subprocess.CREATE_NEW_CONSOLE)
#Change Directory back
os.chdir(savedir)
#Start Client
rajant = rajant_comm.rajant_comm()
rajant.start()
如果你有一个解决方案,将在这两个Linux的工作&窗口,你将是我的英雄。出于某种原因,当我添加creationflags = subprocess.CREATE_NEW_CONSOLE时,我无法更改子流程的stdin或stdout规范。
如果任何人都可以找到一个在Windows和Linux上都有'popen'工作的优雅方法,我将创建一个赏金和奖励代表。 – 2010-11-09 02:49:42
为什么不创建启动这两个程序的简单.bat/bash脚本? – 2010-11-09 09:19:45