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

def foo():
    print("hellow")
# test2.py
from test1 import foo # might be different if in different folder.
foo()

但根据标题,使用os.startfile(“path”)是最好的方法,因为它很小,而且它可以工作。这将执行指定的文件。我的python版本是3。x +。

其他回答

通常的做法是这样的。

test1.py

def some_func():
    print 'in test 1, unproductive'

if __name__ == '__main__':
    # test1.py executed as script
    # do something
    some_func()

service.py

import test1

def service_func():
    print 'service func'

if __name__ == '__main__':
    # service.py executed as script
    # do something
    service_func()
    test1.some_func()

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

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

if condition:
       import recommend

技术是不同的,但有效!

如果你想让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

根据上面的例子,这是最好的方法:

# test1.py

def foo():
    print("hellow")
# test2.py
from test1 import foo # might be different if in different folder.
foo()

但根据标题,使用os.startfile(“path”)是最好的方法,因为它很小,而且它可以工作。这将执行指定的文件。我的python版本是3。x +。

另一种方法:

文件test1.py:

print "test1.py"

文件service.py:

import subprocess

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

这种方法的优点是,您不必编辑现有的Python脚本来将其所有代码放入子例程中。

文档:Python 2, Python 3