python的os,commands,subprocess启动进程调用的几种方法

因为我碰到项目需求需要用python去调用jython的文件.因为虽然都是python家族,但是一个是java一个是c的,所以研究了下文件交互的方法,虽然结论不用这个模式,但是记录下这个经验.

一般最简单会想到os.system和os.popen,

os.system("test.py 1 2 3")

在代码中,可以通过sys.argv来获取入参,但是问题来了,我想返回参数的话,基本上是返回不了的.

后来通过研究可以通过sys.exit()来返回自定义参数,但是这个时候只能用popen了.

但是通过read的函数返回的值通过会连打印信息都返回,我需要的是,调用了一个jython的py文件后返回执行的输出参数的话,就比较困难了.

我看了下subprocess.popen系列,的确很强大:

Popen.stdin
如果在创建Popen对象是,参数stdin被设置为PIPE,Popen.stdin将返回一个文件对象用于策子进程发送指令。否则返回None。
Popen.stdout
如果在创建Popen对象是,参数stdout被设置为PIPE,Popen.stdout将返回一个文件对象用于策子进程发送指令。否则返回 None。
Popen.stderr
如果在创建Popen对象是,参数stdout被设置为PIPE,Popen.stdout将返回一个文件对象用于策子进程发送指令。否则返回 None。
Popen.pid
获取子进程的进程ID。
Popen.returncode
获取进程的返回值。如果进程还没有结束,返回None。
下面是一个非常简单的例子,来演示supprocess模块如何与一个控件台应用程序进行交互。
import subprocess

p = subprocess.Popen(“test.py”, stdin = subprocess.PIPE, /
stdout = subprocess.PIPE, stderr = subprocess.PIPE, shell = False)

p.stdin.write(’1’)
print p.stdout.read()

虽然看上去好比os.popen高端些,但是我还是获取到很多不需要的输出参数.


后来又找到了一个commands.getstatusoutput

status, output = commands.getstatusoutput("ls")
但是可惜的是,因为我的jython调用了jar包,使用这个方法后会辨认不了java的语法,所以我又失望了下.


因为项目时间原因我就停止研究下去,不过我觉得上面的方法大同小异,有简单有复杂的,所以问题应该是我返回参数的那块没有做好.如果后续有需求,我会继续在返回参数这块做技术研究.


  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值