通过子进程运行Python脚本失败

时间:2016-08-12 05:35:16

标签: python subprocess

我正在尝试使用file1.py从脚本subprocess运行util.py.它们都在同一个目录中。当我从当前目录运行它时它工作正常,但是如果我从不同的目录运行file1.py它就会失败。

file1.py:

#!/usr/bin/env python
import subprocess
out=subprocess.Popen(["./util.py"],shell=True)
print "done"

util.py:

#!/usr/bin/env python
def display():
  print "displaying"
display()

错误:

/bin/sh: ./util.py: No such file or directory
  done

2 个答案:

答案 0 :(得分:0)

在终端中执行./util.py意味着"在当前工作目录中查找名为util.py的文件并运行它。"工作目录是运行命令的目录。这意味着如果从另一个目录运行它,你的python脚本就看不到util.py。

如果您确定file1.py和util.py始终位于同一目录中,则可以使用__file__os.path.dirname为其添加file1.py:

file1.py:

#!/usr/bin/env python
import os
import subprocess

current_dir = os.path.dirname(__file__)
filename = os.path.join(current_dir, "util.py")
out = subprocess.Popen([filename], shell=True)
print("done")

答案 1 :(得分:0)

您可以使用execfile()代替subprocess.Popen()

file1.py:

execfile("util.py")
print "done"

或者如果你想处理它们,你可以使用已经在python标准库中的threading模块:

from threading import Thread

Thread(target=lambda:execfile("util.py")).start()  
print "done"