2016-03-02 166 views
0

我有一个python程序,可以动态地将文件移动并重命名为hadoop集群。这些文件通常从10MB(解析)到1.5GB(原始数据)。对于移动命令来完成它可能需要一段时间,从我可以告诉python比赛通过它们,并没有任何移动命令完成。让python等待以前的命令的正确方法是什么?我将这些命令存储在一个变量中,并将其传递给os.system。相关的代码是让Python等待命令结束

os.system(moverawfile) 
os.system(renamerawfile) 
os.system(moveparsedfile) 
os.system(renameparsedfile) 

我知道重命名命令基本上是即时完成的。我不应该使用os.system?我如何确保python在进入下一个命令前等待每个命令完成。

+0

什么是您的确切代码? 'os.system'不会返回,直到它产生的命令退出。 – chepner

+1

反正你应该使用['subprocess'](https://docs.python.org/2/library/subprocess.html)。例如,您可以在命令错误上引发异常。 – Kupiakos

+0

os.system只是调用['system(3)'](http://linux.die.net/man/3/system),并等待命令完成。 – Kevin

回答

0

我建议你根据Python文档使用从子进程运行。它在返回之前等待命令完成。

+0

'subprocess'等待一些方法 - 其他人不。 。 。 – mgilson

+0

什么是子过程的正确语法? – Sam

+0

'os.system'已经等待;如果它的行为与'os.system'异步,'subprocess'不能解决这个问题(尽管它通常是个好主意)。 – ShadowRanger