关于这个话题有很多问题,但我向你保证,他们似乎并不适合我。从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)
我只是不能让我的脚本工作,任何想法将不胜感激
答案 0 :(得分:1)
我的第一个(也许是愚蠢的)想法是从A.py创建一个临时文件,写一个Bash脚本来运行带有所有参数的B.py,添加+ X标志并使用tempfile生成gnome-terminal作为参数跑。这种溶液对你来说足够好了吗?