我正试图通过自动化我的工作场所中使用的一系列脚本来解决一个问题。我是一个初学者,所以我为很可能是一个简单的问题道歉(希望如此),我已经读过文献,但它对我来说不太有意义。
基本上我有一个bash脚本,它运行一个python脚本,还有一个r脚本,需要按顺序运行,当前运行的代码r脚本在python完成之前就开始了,这里告诉我不能使用shell wait函数,因为python脚本启动子进程,shell wait不能用于等待孙子进程。
这很好,所以提供的解决方案是让Python和R脚本在它们自己的子进程上等待,这样当它们退出时,BASH脚本可以正常运行。不幸的是,在我的python脚本中,我无法找到正确的名称。
以下是我所拥有的:
cmd = "python %s/create_keyfile.py %s %s %s %s" %(input, input, input,
input, input)
print cmd
os.system(cmd)
cmd = "python %s/uneak_name_plus_barcode_v2.py %s %s %s %s" %(input,
input, input, input, input)
print cmd
os.system(cmd)
cmd = "python %s/run_production_mode.py %s %s %s %s %s" %(input, input,
input, input, input, input)
print cmd
os.system(cmd)
如果“input”是我代码中的实际输入,我可能无法确切地分享我们正在做的事情:)
因此,本质上,我试图找出在退出之前让整个脚本等待这三个脚本的最佳方法。
编辑:谢谢你的帮助,这是什么导致我的困境,任何人谷歌搜索这个。我决定从time import sleep;sleep(30)”“中插入“python-c”到我的代码中,前两个python脚本正在按预期等待,最后一个没有等待(在脚本运行之后计时器会立即触发)。结果,第三个python脚本还调用了另一个小python脚本,该脚本的末尾有一个“&”,忽略了等待它的任何命令。简单地删除它&允许所有代码按顺序运行。
最佳答案
使用subprocess.check_call()
不os.system()
subprocess.check_call()
将阻止主python脚本的执行,直到函数返回一个值。
Documentation for check_call() here
子流程模块应始终用于子流程管理和执行,而不是os.system()
。
关于python - 正确使用os.wait()?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/47897402/