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

时间:2016-11-16 02:44:55

标签: python python-2.7

我已尝试过

中的所有内容
if __name__ == "__main__":

os.system()

我在这里查看了所有其他类似的问题,并阅读官方Python文档。

我无法得到这个

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文件。我得到它与

一起工作
if __name__ == "__main__":

但如果我还想调用另一个脚本怎么办?

我想根据问题的答案来调用不同的脚本。

6 个答案:

答案 0 :(得分:3)

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

import foo
import bar

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

答案 1 :(得分:2)

使用<div class="col-sm-2 col-sm-offset-5" style="background-color:lavender;">ColSize2</div> 的关键是以字符串格式传递shell命令。

如果您想与该脚本进行通信,则可能需要os.system("python createbid.py")。 请参阅此问题的答案:running bash commands in python

答案 2 :(得分:2)

这可能在这里回答:What is the best way to call a Python script from another Python script?

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

def run()
    print 'running'

然后在你的主脚本中,

import createbid

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

if __name__ == '__main__':
    questions()

答案 3 :(得分:2)

如今,推荐其他流程的方法是使用subprocess模块。

这样做比较容易。这是将其应用于您的问题的简单方法:

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 {"Request": {"TrancheList": {"Tranche": [{"Id": "123","OwnedAmt": "26500000", "Currency": "USD" }, { "Id": "456", "OwnedAmt": "41000000","Currency": "USD"}]},"FxRatesList": {"FxRatesContract": [{"Currency": "CHF","FxRate": "0.97919983706115"},{"Currency": "AUD", "FxRate": "1.2966804979253"},{ "Currency": "USD","FxRate": "1"},{"Currency": "SEK","FxRate": "8.1561012531034"},{"Currency": "NOK", "FxRate": "8.2454981641398"}]},"isExcludeDeals": "true","baseCurrency": "USD"}} val inputdf = spark.read.json("hdfs://localhost/user/xyz/request.json") inputdf.printSchema 不同。

答案 4 :(得分:0)

或者,您可以使用exec(Python2中的语句,Python3中的函数)。

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

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

这样做的优点是exec允许您在之前定义变量,并在脚本中使用它们。

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

#Main script
param1 = 12
param2 = 23
scriptContent = open("scriptA.py", 'r').read()
exec(scriptContent)

#scriptA.py
print(param1 + param2)

尽管如此,这种方法更像是一种有趣的技巧,根据具体情况,应该有几种方法可以做得更好。

答案 5 :(得分:0)

感谢您的帮助!我结合了几个答案让它发挥作用。

这有效:

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()