我有一个名为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

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


当前回答

import os

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

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

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

其他回答

将此添加到python脚本中。

import os
os.system("exec /path/to/another/script")

这将像在shell中输入命令一样执行该命令。

第一次使用import test1 -它将执行脚本。对于以后的调用,将脚本视为导入的模块,并调用reload(test1)方法。

当reload(module)执行时: Python模块的代码被重新编译,模块级代码被重新执行,定义一组新的对象,这些对象被绑定到模块字典中的名称。扩展模块的init函数没有被调用

一个简单的检查sys。模块可用于调用适当的操作。要继续将脚本名称引用为字符串('test1'),请使用内置的'import()'。

import sys
if sys.modules.has_key['test1']:
    reload(sys.modules['test1'])
else:
    __import__('test1')

如果你想让test1.py保持可执行的功能,就像在service.py内部调用它一样,然后做如下的事情:

test1.py

def main():
    print "I am a test"
    print "see! I do nothing productive."

if __name__ == "__main__":
    main()

service.py

import test1
# lots of stuff here
test1.main() # do whatever is in test1.py

正如前面提到的,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)