【问题标题】:Running Python script through subprocess fails通过子进程运行 Python 脚本失败
【发布时间】:2016-08-12 05:35:16
【问题描述】:

我正在尝试使用 subprocess 从脚本 file1.py 运行 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

【问题讨论】:

  • 使用完整路由而不是"./util.py"

标签: python subprocess


【解决方案1】:

在终端中执行./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")

【讨论】:

    【解决方案2】:

    您可以使用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"
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2015-09-10
      • 2022-09-30
      • 2020-10-09
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-12-14
      • 1970-01-01
      相关资源
      最近更新 更多