Python popen 命令。等待命令完成
- 2025-02-27 09:07:00
- admin 原创
- 56
问题描述:
我有一个脚本,我使用 popen 命令启动 shell 命令。问题是脚本不会等到 popen 命令完成后就立即继续。
om_points = os.popen(command, "w")
.....
我怎样才能告诉我的 Python 脚本等到 shell 命令完成?
解决方案 1:
根据脚本的运行方式,您有两个选择。如果您希望命令在执行时被阻止并且不执行任何操作,则只需使用subprocess.call
。
#start and block until done
subprocess.call([data["om_points"], ">", diz['d']+"/points.xml"])
如果您想在执行时执行某些操作或将内容输入其中stdin
,则可以在调用communicate
后使用popen
。
#start and process things, then wait
p = subprocess.Popen([data["om_points"], ">", diz['d']+"/points.xml"])
print "Happens while running"
p.communicate() #now wait plus that you can send commands to process
正如文档中所述,wait
可能会发生死锁,因此建议进行沟通。
解决方案 2:
您可以使用它subprocess
来实现这一点。
import subprocess
#This command could have multiple commands separated by a new line
some_command = "export PATH=$PATH://server.sample.mo/app/bin
customupload abc.txt"
p = subprocess.Popen(some_command, stdout=subprocess.PIPE, shell=True)
(output, err) = p.communicate()
#This makes the wait possible
p_status = p.wait()
#This will give you the output of the command being executed
print "Command output: " + output
解决方案 3:
强制popen
不继续,直到读取所有输出:
os.popen(command).read()
解决方案 4:
让您尝试传递的命令是
os.system('x')
然后你把它转换成一个声明
t = os.system('x')
现在 python 将等待命令行的输出,以便将其分配给变量t
。
解决方案 5:
你要找的是wait
方法。
解决方案 6:
wait()对我来说很好用。子进程 p1、p2 和 p3 同时执行。因此,所有进程都在 3 秒后完成。
import subprocess
processes = []
p1 = subprocess.Popen("sleep 3", stdout=subprocess.PIPE, shell=True)
p2 = subprocess.Popen("sleep 3", stdout=subprocess.PIPE, shell=True)
p3 = subprocess.Popen("sleep 3", stdout=subprocess.PIPE, shell=True)
processes.append(p1)
processes.append(p2)
processes.append(p3)
for p in processes:
if p.wait() != 0:
print("There was an error")
print("all processed finished")
解决方案 7:
我认为 process.communicate() 适合输出较小的情况。对于较大的输出,这不是最好的方法。
相关推荐
热门文章
项目管理软件有哪些?
热门标签
曾咪二维码
扫码咨询,免费领取项目管理大礼包!
云禅道AD