我有一个名为test1.py的脚本,它不在模块中。它只有在脚本本身运行时应该执行的代码。没有函数、类、方法等。我有另一个脚本作为服务运行。我想从作为服务运行的脚本调用test1.py。

例如:

文件test1.py:

print "I am a test"
print "see! I do nothing productive."

文件service.py:

# Lots of stuff here
test1.py # do whatever is in test1.py

我知道有一种方法是打开文件,读取内容,然后对它求值。我想应该有更好的方法。至少我希望如此。


当前回答

为什么不直接导入test1?每个python脚本都是一个模块。更好的方法是在test1.py中添加一个函数main/run,导入test1并运行test1.main()。或者可以将test1.py作为子进程执行。

其他回答

我更喜欢runpy:

#!/usr/bin/env python
# coding: utf-8

import runpy

runpy.run_path(path_name='script-01.py')
runpy.run_path(path_name='script-02.py')
runpy.run_path(path_name='script-03.py')

这可以在Python 2中使用

execfile("test2.py")

如果对您的情况很重要,请参阅文档了解名称空间的处理。

在Python 3中,可以使用(感谢@fantastory)

exec(open("test2.py").read())

然而,你应该考虑使用不同的方法;(在我看来)你的想法不太清楚。

这个过程有点非传统,但适用于所有的python版本,

假设你想在一个'if'条件中执行一个名为' recommendation .py'的脚本,然后使用,

if condition:
       import recommend

技术是不同的,但有效!

正如前面提到的,runpy是运行当前脚本中的其他脚本或模块的好方法。

顺便说一下,跟踪器或调试器通常会这样做,在这种情况下,直接导入文件或在子进程中运行文件等方法通常是行不通的。

使用exec运行代码也需要注意。您必须提供适当的run_globals以避免导入错误或其他问题。参考runpy。查看详细信息_run_code。

import os

os.system("python myOtherScript.py arg1 arg2 arg3")  

使用操作系统,您可以直接呼叫您的终端。如果你想更具体,你可以连接你的输入字符串与局部变量,即。

command = 'python myOtherScript.py ' + sys.argv[1] + ' ' + sys.argv[2]
os.system(command)