使用子进程模块从python启动jython程序?
我有一个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 当客户端连接时,服务器在其命令/终端窗口中打印出信息(当前用于调试),客户端程序在其命令/终端窗口中打印出调试信息.我想要做的是通过使用子进程模块从我的’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和Linux的解决方案窗户你会成为我的英雄.出于某种原因,当我添加creationflags = subprocess.CREATE_NEW_CONSOLE时,我无法更改子进程上的stdin或stdout规范. 解决方法
子进程中的Popen函数接受可选参数’cwd’,以定义子进程的当前工作目录.
rajantserver = subprocess.Popen(["cmd", creationflags = subprocess.CREATE_NEW_CONSOLE, cwd = path) 你可以通过这种方式去除os.getcwd调用和两个os.chdir调用.如果您希望能够在Linux上使用此脚本,则必须不使用“cmd”.所以用[“jython”,file]作为第一个参数调用Popen. 编辑:我刚刚看到在Linux上运行时,子进程模块中没有定义CREATE_NEW_CONSOLE.用这个: creationflags = getattr(subprocess,"CREATE_NEW_CONSOLE",0), 这将与之前相同,只是当子进程模块未定义CREATE_NEW_CONSOLE时,它将回退到默认值0. (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |
- python是否有像gem这样的ruby安装程序,它允许你从
- 4.8 Sublime Text3 中配置 Python环境 --之下Sub
- 在Python中操作列表之List.append()方法的使用
- python – Pandas Dataframe将数据拼接成2列,并用
- python – numpy内部存储数组的大小吗?
- python – ‘function’对象没有属性’assert_ca
- Pandas 数据框增、删、改、查、去重、抽样基本操
- python – 将数字字符引用表示法转换为unicode字
- Python多进程方式抓取基金网站内容的方法分析
- python – Insert给我一个空列表?这里发生了什么