从另一个打开另一个shell的python脚本执行python脚本

时间:2015-12-24 23:53:36

标签: python-3.x

我正在使用python 3,我需要一个脚本来调用另一个脚本并在不同的shell中运行它,而不传递参数,我使用的是mac os x,但我需要它是跨平台的。

我试过

import sys
import os
import datetime

os.remove('Logs/consoleLog.txt')
try:
    os.remove('Temp/commands.txt')
except:
    ...

stopSim = False

command = ''

okFile = open('ok.txt', 'w')
okFile.write('True')
consoleLog = open('Logs/consoleLog.txt', 'w')

okFile.close()

while not stopSim:

    try:
        sysTime = datetime.datetime.now()
        stringT = str(sysTime)
        split1 = stringT.split(" ")
        split2 = split1[0].split("-")
        split3 = split1[1].split(":")

        for i in range(3):
            split2.append(split3[i])

        timeString = "{0}-{1}-{2} {3}:{4}".format(split2[2], split2[1],   split2[0], split2[3], split2[4])
    except:
        timestring = "Time"

    commandFile = open('Temp/commands.txt', 'w')

    command = input(timeString + ": ")
    command = command.lower()

    consoleLog.write(timeString + ': ' + command + "\n")
    commandFile.write(command)

    commandFile.close()
    if command == 'stop simulation' or command == 'stop sim':
        stopSim = True

consoleLog.close()
os.remove('Temp/commands.txt')

但他们都没有达到我的需要。

我使用第二个脚本来获取输入,而第一个脚本处理输出......

修改

这是我的第二个脚本上的代码:

#Open console

while not consoleOpent:
    try:
        okFile = open('ok.txt', 'r')
        c = okFile.read()
        if c == 'True':
            consoleOpent = True
    except:
        ...

这就是我打电话的地方以及脚本1中其他脚本的用法:

grequests

很抱歉这个问题很长...... 欢迎任何改进代码的建议。

2 个答案:

答案 0 :(得分:0)

最简单的解决方案可能是让第二个脚本的内容成为第一个脚本中的一个函数,然后将其作为multiprocessing Process执行。请注意,您可以使用e.q. multiprocessing.Pipemultiprocessing.Queue在不同进程之间交换数据。您还可以通过multiprocessing.sharedctypes分享值和数组。

答案 1 :(得分:0)

这将取决于平台。这是Mac OS X的解决方案。

使用以下内容创建新文件run_script2

/full/path/to/python /full/path/to/script2.py

使其可执行:chmod +x run_script2

使用以下命令从Python运行:

os.system('open -a Terminal run_script2')

或者您可以使用:subprocess.call

subprocess.call(['open -a Terminal run_script2'], shell=True)

在Windows上,您可以执行与(未经测试)类似的操作:

os.system('start cmd /D /C "python script2.py && pause"')