【发布时间】:2016-01-16 12:01:59
【问题描述】:
所以我在一个目录中运行一个循环,由 subprocess.Popen 运行的外部脚本在该目录中移动并对每个文件执行计算。外部脚本有点不稳定,当它遇到不知道如何处理的文件时偶尔会冻结。有没有办法向 subprocess.Popen 添加超时功能,以便我可以跳过该文件并继续下一个?
编辑: 这是我的循环:
def automate():
os.chdir("/home/mlts/dir")
working_dir = b"/home/mts/dir"
for filename in os.listdir(working_dir):
if filename.endswith(".MTS"):
try:
print("Performing calculations on {filename!r}...".format(**vars()))
try:
os.remove("mts_tbl.txt")
except OSError:
pass
time.sleep(3)
p = Popen(["run_command.command", "-f", "a"], cwd=working_dir, stdin=PIPE)
p.communicate(input=b"\n".join([b"1", str(filename), b"8", b"alloy-liquid", b"0", b"x", b"5", b"4", b"-1.6", b"4", b"1", b"0"]))
【问题讨论】:
-
一个可以帮助您完成超时部分,但要跳过文件脚本冻结,您必须提供代码
-
知道了。编辑提供...
-
你错过了 os.chdir 行的最后一个 "
-
一次做两件事,1=运行函数,2=经过一定时间后取消,你使用多处理或线程。就个人而言,我会将该函数称为多处理进程,并在允许的时间过去后终止该进程。 Doug Hellmann 的页面位于 pymotw.com/2/multiprocessing/basics.html#terminating-processes
-
这种方法是否允许继续循环到目录中的下一个文件?
标签: python loops timeout subprocess