【问题标题】:trying to run a python script from within another python script [duplicate]试图从另一个 python 脚本中运行 python 脚本[重复]
【发布时间】:2015-03-11 17:57:06
【问题描述】:

我正在尝试从另一个 Python 脚本 second.py 中运行一个 Python 脚本 first.py

second.py 包含语句os.system("python first.py")

first.py:以前默认打开的应用是记事本。但是,我将默认程序更改为python.exe,现在什么也没有发生。 first.py 甚至没有运行。

谁能帮忙?

【问题讨论】:

  • 在将默认程序更改为 python.exe 之前发生了什么?

标签: python


【解决方案1】:

不使用os.system(),执行另一个脚本的干净方法是将import它作为一个模块:

import second

这将导致“second.py”被执行。

>>> with open('test.py', 'w') as f: f.write('print "hello world"')
... 
>>> import test
hello world

【讨论】:

  • 要注意的一件事是命名空间条件。如果导入脚本中的代码以'if __name__ == "__main__":'为前缀,则代码在导入后不会运行,但会在通过调用os.system() 执行时运行。
【解决方案2】:

您可以使用 subprocess.call 模块运行您的另一个 python 程序。

import subprocess

subprocess.call("second.py", shell=True)

【讨论】:

    【解决方案3】:

    如果所有脚本都来自“受信任”的来源,您可以安全地使用execfile()

    with open('second.py', 'w') as f: f.write('print "hello world"')
    
    try:
        execfile('second.py')  # -> hello world
    except Exception as e:
        # could also be "pass", "time.sleep()", etc
        print 'exception {} occurred'.format(e)  
    
    print 'continuing on...'
    

    这样做的一个优点是它独立于哪个默认程序与 Python 脚本相关联。 execfile() 的参数也可以是另一个文件夹中脚本的完整路径,例如:

        execfile('c:/path/to/different/directory/first.py')
    

    【讨论】:

    • 成功了..谢谢
    • 这带来了另一个问题。如果 first.py 有错误,代码就会中断。我希望我的代码忽略错误并继续执行 second.py 、 thrid.py 等等....你能帮忙吗?
    • 我可以试试。发生什么样的错误或引发异常?
    • 在这些文件中,我正在尝试连接到不同的 FTP 服务器。在某些情况下,当服务器没有响应或不可用时,我会收到错误 10061 或 10060。但如果我稍后再试, evrything 工作正常.. 我只是不希望其他脚本在其中一个 FTP 服务器未连接时失败。
    • 好的,我更新了我的答案。但是,最好放置一个特定的异常(或它们的元组),而不是显示一个通用的异常 Exception
    猜你喜欢
    • 1970-01-01
    • 2017-03-30
    • 2016-09-03
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2023-03-20
    • 2019-09-03
    相关资源
    最近更新 更多