【问题标题】:calling python script from another script从另一个脚本调用 python 脚本
【发布时间】:2013-07-30 15:10:15
【问题描述】:

我试图让简单的 python 脚本调用另一个脚本,只是为了更好地理解它是如何工作的。 'main' 代码如下所示:

#!/usr/bin/python
import subprocess
subprocess.call('kvadrat.py')

以及它调用的脚本 - kvadrat.py:

#!/usr/bin/python
def kvadriranje(x):
    kvadrat = x * x
    return kvadrat

print kvadriranje(5)

被调用的脚本可以自己运行,但是当通过'main'脚本调用时会发生错误:

Traceback (most recent call last):
  File "/Users/user/Desktop/Python/General Test.py", line 5, in <module>
    subprocess.call('kvadrat.py')
  File "/System/Library/Frameworks/Python.framework/Versions/2.6/lib/python2.6/subprocess.py", line 444, in call
  File "/System/Library/Frameworks/Python.framework/Versions/2.6/lib/python2.6/subprocess.py", line 595, in __init__
  File "/System/Library/Frameworks/Python.framework/Versions/2.6/lib/python2.6/subprocess.py", line 1106, in _execute_child
OSError: [Errno 2] No such file or directory

显然有问题,但作为初学者看不出什么。

【问题讨论】:

  • 两个源文件在同一个目录下吗?看起来错误是说它找不到'kvadrat.py'
  • 我相信你需要将 python 添加到你的调用中,除非 python 是你打开 .py 文件的默认设置
  • 它们都在同一个目录中。即使我将 python 添加到调用中,也会发生相同的错误。

标签: python


【解决方案1】:

您需要为其提供您尝试调用的脚本的完整路径,如果您想动态执行此操作(并且您在同一目录中),您可以这样做:

import os    
full_path = os.path.abspath('kvadrat.py')

【讨论】:

    【解决方案2】:

    你试过了吗:

    from subprocess import call
    call(["python","kvadrat.py"]) #if in same directory, else get abs path
    

    您还应该检查您的文件是否存在:

    import os
    print os.path.exists('kvadrat.py')
    

    【讨论】:

    • 试过这个,也可以。但为什么这有效而 subprocess.call 无效?是不是应该做同样的事情。文件在同一目录中,并具有 exe 权限。
    • 实际上,这是唯一适用于 Mac OS X 10.10 的解决方案
    【解决方案3】:

    Subprocess.call 要求文件是可执行的并且在路径中找到。在unix系统中,可以尝试使用subprocess.call(['./kvadrat.py'])在当前工作目录下执行一个kvadrat.py文件,并确保kvadrat.py具有可执行权限;或者您可以将它复制到 PATH 中的一个目录,例如 /usr/local/bin - 然后它可以在您想要的任何地方执行。

    大多数时候,您不想使用子进程运行其他 python 应用程序,而只是将它们作为模块导入,但是...

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2019-06-18
      • 1970-01-01
      • 1970-01-01
      • 2011-06-01
      • 2022-08-02
      • 1970-01-01
      • 1970-01-01
      • 2013-06-01
      相关资源
      最近更新 更多