trying to run a python script from within another python script
我试图在另一个Python脚本second.py中运行一个python脚本first.py。
second.py包含os.system("python first.py")语句。
first.py:默认的开放应用程序以前是记事本。但是,我把默认程序改为python.exe,现在什么也没发生。first.py甚至不运行。
有人能帮忙吗?
- 在您将默认程序更改为python.exe之前发生了什么?
如果所有脚本都来自"可信"源,则可以安全地使用execfile()。
1 2 3 4 5 6 7 8 9
| 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()的参数可以是另一个文件夹中脚本的完整路径,例如:
1
| execfile('c:/path/to/different/directory/first.py') |
- 它起作用了……谢谢
- 这带来了另一个问题……如果first.py出错,则代码将中断。我希望代码忽略错误,继续执行second.py、thrid.py等。你能帮忙吗?
- 我可以试试。发生了什么类型的错误或引发了异常?
- 在这些文件中,我试图连接到不同的FTP服务器。在某些情况下,当服务器没有响应或不可用时,我会收到错误10061或10060。但如果我以后再试试,一切都会好起来的。我只是不希望其他脚本在某个ftp服务器未连接时失败。
- 好的,我更新了我的答案。但是,最好是放入一个特定的异常(或它们的元组),而不是一个通用的异常,Exception,如图所示。
- 非常感谢……它解决了我的问题……我会做一些例外的研究,为我的案例使用一个特定的例外……再次感谢。
- 不客气。我建议这样做是因为我自己使用了它,因为它比将一个模块导入另一个模块(因为您的问题的公认答案标记为Do的副本)更容易控制(或者更容易控制)。
- 嘿,又需要你的帮助…我收到一个ftp异常。错误:421用户帐户已过期…你能告诉我怎样才能忽略这一个ftp错误并捕获所有其他ftp错误吗?我在网上做了很多研究,但找不到方法。提前谢谢
- 如果您的except子句专门捕获一个ftp异常,那么您应该能够检查捕获的异常的value属性,看看它是否是421属性,然后在这种情况下忽略它(或者不忽略它,这取决于处理程序中的逻辑)。
您可以使用subprocess.call模块运行另一个python程序。
1 2 3
| import subprocess
subprocess.call("second.py", shell=True) |
与使用os.system()不同,执行另一个脚本的干净方法是将import作为模块:
将导致执行"second.py"。
1 2 3 4
| >>> with open('test.py', 'w') as f: f.write('print"hello world"')
...
>>> import test
hello world |
- 需要注意的一件事是名称空间条件。如果导入的脚本中的代码前缀为"if uu name_uu=="uuu main_uuu":",则导入后代码将不会运行,但在通过调用os.system()执行时会运行。