使用元组列表参数启动gnome-terminal

时间:2014-12-26 19:36:23

标签: python console gnome

关于这个话题有很多问题,但我向你保证,他们似乎并不适合我。从Python脚本A.py,我想在新窗口中打开另一个python脚本,B.py,传递一些参数:

ListA = [('192.168.2.1', '192.168.2.8'), ('192.168.2.3', '192.168.2.5'), ('192.168.2.8', '192.168.2.4')]
Interface = "wlan0"

通常情况下,我会通过推荐行传递它们: B.py -i接口-p ListA

但是目前我在传递它们时遇到了一些麻烦,这就是我所尝试过的:

import subprocess, shlex, os, sys
subprocess.Popen(shlex.split('gnome-terminal -x bash "' + os.path.join(os.path.dirname(__file__), 'B.py') + ' -i ' + Interface + ' -p "' + str(ListA) + '""'), stdout=subprocess.PIPE)

subprocess.Popen(['gnome-terminal', '-x', '"bash', '-c', os.path.join(os.path.dirname(__file__), 'B.py'), '-i', Interface, '-p', '"' + str(ListenPipes) + '""'], stdout=subprocess.PIPE)

我在扫描字符串文字时遇到了多个错误,导致语法无效,#33;行结束'

B.py:

if __name__ == "__main__":
    if len(sys.argv) == 1:
        print 'Specify all arguments: B.py -i <Interface> -p <Pipe tuple list [(StartPipe, EndPipe), ..]>'
        sys.exit()
    interface = 'wlan0'
    try:
        opts, args = getopt.getopt(sys.argv[1:],"hi:p:",["interface","pipes"])
    except getopt.GetoptError:
        print 'B.py -i <Interface> -p <Pipe tuple list [(StartPipe, EndPipe), ..]>'
        sys.exit()
    for opt, arg in opts:
        if opt == '-h':
            print 'usage: B.py -i <Interface> -p <Pipe tuple list [(StartPipe, EndPipe), ..]>'
            sys.exit()
        elif opt in ("-i", "--interface"):
            interface = re.compile('\033\[\d+(?:;\d+)?m').sub('',arg) #Remove bash colors
        elif opt in ("-p", "--pipes"):
            ListenPipes = ast.literal_eval(arg)

我只是不能让我的脚本工作,任何想法将不胜感激

1 个答案:

答案 0 :(得分:1)

我的第一个(也许是愚蠢的)想法是从A.py创建一个临时文件,写一个Bash脚本来运行带有所有参数的B.py,添加+ X标志并使用tempfile生成gnome-terminal作为参数跑。这种溶液对你来说足够好了吗?