概述
考虑这样一个问题,有hello.py脚本,输出”hello, world!”;有TestInput.py脚本,等待用户输入,然后打印用户输入的数据。那么,怎么样把hello.py输出内容发送给TestInput.py,最后TestInput.py打印接收到的”hello, world!”。下面我来逐步讲解一下shell的交互方式。
hello.py代码如下:
#!/usr/bin/python print "hello, world!"
TestInput.py代码如下:
#!/usr/bin/python str = raw_input() print("input string is: %s" % str)
1.os.system(cmd)
这种方式只是执行shell命令,返回一个返回码(0表示执行成功,否则表示失败)
retcode = os.system("python hello.py") print("retcode is: %s" % retcode);
输出:
hello, world! retcode is: 0
2.os.popen(cmd)
执行命令并返回该执行命令程序的输入流或输出流.该命令只能操作单向流,与shell命令单向交互,不能双向交互.
返回程序输出流,用fouput变量连接到输出流
fouput = os.popen("python hello.py") result = fouput.readlines() print("result is: %s" % result);
输出:
result is: ['hello, world!\n']
返回输入流,用finput变量连接到输出流
finput = os.popen("python TestInput.py", "w") finput.write("how are you\n")
输出:
input string is: how are you
3.利用subprocess模块
subprocess.call()
类似os.system(),注意这里的”shell=True”表示用shell执行命令,而不是用默认的os.execvp()执行.
f = call("python hello.py", shell=True) print f
输出:
hello, world! 0
subprocess.Popen()
利用Popen可以是实现双向流的通信,可以将一个程序的输出流发送到另外一个程序的输入流.
Popen()是Popen类的构造函数,communicate()返回元组(stdoutdata, stderrdata).
p1 = Popen("python hello.py", stdin = None, stdout = PIPE, shell=True) p2 = Popen("python TestInput.py", stdin = p1.stdout, stdout = PIPE, shell=True) print p2.communicate()[0] #other way #print p2.stdout.readlines()
输出:
input string is: hello, world!
整合代码如下:
#!/usr/bin/python import os from subprocess import Popen, PIPE, call retcode = os.system("python hello.py") print("retcode is: %s" % retcode); fouput = os.popen("python hello.py") result = fouput.readlines() print("result is: %s" % result); finput = os.popen("python TestInput.py", "w") finput.write("how are you\n") f = call("python hello.py", shell=True) print f p1 = Popen("python hello.py", stdin = None, stdout = PIPE, shell=True) p2 = Popen("python TestInput.py", stdin = p1.stdout, stdout = PIPE, shell=True) print p2.communicate()[0] #other way #print p2.stdout.readlines()
Python,shell
免责声明:本站文章均来自网站采集或用户投稿,网站不提供任何软件下载或自行开发的软件! 如有用户或公司发现本站内容信息存在侵权行为,请邮件告知! 858582#qq.com
《魔兽世界》大逃杀!60人新游玩模式《强袭风暴》3月21日上线
暴雪近日发布了《魔兽世界》10.2.6 更新内容,新游玩模式《强袭风暴》即将于3月21 日在亚服上线,届时玩家将前往阿拉希高地展开一场 60 人大逃杀对战。
艾泽拉斯的冒险者已经征服了艾泽拉斯的大地及遥远的彼岸。他们在对抗世界上最致命的敌人时展现出过人的手腕,并且成功阻止终结宇宙等级的威胁。当他们在为即将于《魔兽世界》资料片《地心之战》中来袭的萨拉塔斯势力做战斗准备时,他们还需要在熟悉的阿拉希高地面对一个全新的敌人──那就是彼此。在《巨龙崛起》10.2.6 更新的《强袭风暴》中,玩家将会进入一个全新的海盗主题大逃杀式限时活动,其中包含极高的风险和史诗级的奖励。
《强袭风暴》不是普通的战场,作为一个独立于主游戏之外的活动,玩家可以用大逃杀的风格来体验《魔兽世界》,不分职业、不分装备(除了你在赛局中捡到的),光是技巧和战略的强弱之分就能决定出谁才是能坚持到最后的赢家。本次活动将会开放单人和双人模式,玩家在加入海盗主题的预赛大厅区域前,可以从强袭风暴角色画面新增好友。游玩游戏将可以累计名望轨迹,《巨龙崛起》和《魔兽世界:巫妖王之怒 经典版》的玩家都可以获得奖励。