从另一个python脚本运行一个python脚本?

Run one python script from another python script?

本问题已经有最佳答案,请猛点这里访问。

我已经试过了

1
if __name__ =="__main__":

1
os.system()

我已经阅读了这里所有其他类似的问题,并阅读了官方的python文档。

我拿不到这个

1
2
3
4
5
6
7
8
9
10
11
import os

ask1 = raw_input("Create bid?")
create ="createbid.py %s" % ()
def questions():
    if ask1 =="yes":
        os.system(create)
    if ask1 =="no":
        quit()

question()

可靠地运行ceatebid.py文件。我要和它一起工作

1
if __name__ =="__main__":

但是如果我还想调用另一个脚本呢?

我想根据问题的回答方式调用不同的脚本。


我不确定你到底想做什么,但总的来说,你应该能够做这样的事情。

1
2
3
4
5
6
7
8
import foo
import bar

ask = raw_input("Do something?")
if ask.lower() in ('yes', 'y'):
    foo.do_something()
else:
    bar.do_other()

现在,启动其他进程的推荐方法是使用subprocess模块。

做起来相对容易。下面是一个简单的方法来应用于您的问题:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
import subprocess
import sys

create = [sys.executable, 'createbid.py']

def question(ans):
    if ans == 'yes':
        subprocess.call(create)
    elif ans == 'no':
        quit()

ask1 = raw_input('Create bid? ')
question(ask1)
print('done')

注意:当以这种方式执行createbid.py或其他脚本时,
__name__ == '__main__'将是True,与import版不同。


这里可能回答了这个问题:从另一个python脚本调用python脚本的最佳方法是什么?

因此,您需要在createbid.py(和其他脚本)中定义一些方法:

1
2
def run()
    print 'running'

然后在主脚本中,

1
2
3
4
5
6
7
8
9
10
import createbid

def questions():
    if ask1 =="yes":
        createbid.run()
    if ask1 =="no":
        quit()

if __name__ == '__main__':
    questions()


使用os.system("python createbid.py")的关键是以字符串格式传递shell命令。

如果您想与该脚本通信,您可能需要subprocess。请参阅这个问题的答案:在python中运行bash命令


谢谢你的帮助!我把几个答案结合起来使它起作用。

这工作:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
import seebid
import createbid

ask1 = raw_input("Create bid?")
ask2 = raw_input("View bid?")
create = createbid
see = seebid

def questions():

    if ask1.lower() in ('yes', 'y'):
        create.createbd()
    elif ask1.lower() in ('no', 'n'):
        ask2

    if ask2.lower() in ('yes', 'y'):
        see.seebd()

if __name__ =="__main__":
    questions()

或者,可以使用exec(python2中的语句,python3中的函数)。

假设脚本scriptA存储在名为scriptA.py的文件中。然后:

1
2
scriptContent = open("scriptA.py", 'r').read()
exec(scriptContent)

这样做的好处是,exec允许您在前面定义变量,并在脚本内部使用它们。

因此,如果要在运行脚本之前定义一些参数,您仍然可以在解决方案中调用它们:

1
2
3
4
5
6
7
8
#Main script
param1 = 12
param2 = 23
scriptContent = open("scriptA.py", 'r').read()
exec(scriptContent)

#scriptA.py
print(param1 + param2)

不过,这种方法更像是一种有趣的技巧,根据具体情况,应该有几种更好的方法。