【发布时间】:2011-05-07 00:06:51
【问题描述】:
我有一个 jython 服务器脚本(称为 rajant_server.py),它与 java api 文件交互以通过特殊的网络无线电进行通信。我有一个充当客户端的 python 程序(并且还做其他几件事)。目前,我必须首先通过打开命令/终端窗口并键入以下内容来启动服务器:
cd [path to directory containing rajant_server.py
jython rajant_server.py
一旦服务器成功连接,它就会等待客户端,我首先运行:
cd [path to directory containing python client program]
python main.py
当客户端连接时,服务器在其命令/终端窗口中打印出信息(当前用于调试),客户端程序在其命令/终端窗口中打印出调试信息。 我想做的是通过使用 subprocess 模块从我的“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 和 windows 的解决方案,您将是我的英雄。由于某种原因,当我添加 creationflags = subprocess.CREATE_NEW_CONSOLE 时,我无法更改子进程的标准输入或标准输出规范。
【问题讨论】:
-
如果有人能找到一种优雅的方式让
popen在 Windows 和 Linux 上工作,我将创建一个赏金和奖励代表。 -
为什么不创建简单的 .bat/bash 脚本来启动这两个程序?
标签: python subprocess jython