ICode9

精准搜索请尝试: 精确搜索
首页 > 系统相关> 文章详细

使用子进程模块从python启动jython程序?

2019-07-10 06:58:35  阅读:220  来源: 互联网

标签:python subprocess 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",command],\
        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,subprocess,jython
来源: https://codeday.me/bug/20190710/1421330.html

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有