wxpython转移参数

wxpython转移参数,wxpython,args,Wxpython,Args,有两个脚本,一个用参数(*args)调用另一个,另一个被调用并显示一个表单,显示一个表单工作正常,但没有从调用脚本传输参数。我尝试通过命令行运行被调用的脚本,得到了相同的结果。下面是两个脚本的片段 Python2.7.14 wxPython3.0.2.0-py27赢10 sy0000.py calling sy0001.py def CallPGM( self, event ): lstParms = ['python', 'sy0001.py'] dctParms = {

有两个脚本,一个用参数(*args)调用另一个,另一个被调用并显示一个表单,显示一个表单工作正常,但没有从调用脚本传输参数。我尝试通过命令行运行被调用的脚本,得到了相同的结果。下面是两个脚本的片段 Python2.7.14 wxPython3.0.2.0-py27赢10

sy0000.py  calling  sy0001.py

def CallPGM( self, event ):
    lstParms = ['python', 'sy0001.py']
    dctParms = {"pgm_version_id": "ver0000"}
    lstArgs = ['ver0000', 'noby']
    #os.system("python sy0001.py " + "ver0000")    # works but args not transfered
    strParms = "python sy0001.py " + "ver0000"
    os.system(strParms)  # works but args not transfered
    #subprocess.Popen(lstParms + lstArgs)    # works but args not transfered
    #subprocess.Popen('python', 'sy0001.py', 'abcd', 'ver0000', 'noby')  # buffer size error
    #subprocess.Popen(['python', 'sy0001.py', 'abcd', 'ver0000', 'noby'])  # works but args not transfered
    subprocess.call(lstParms + lstArgs)                                   # works but args not transfered
    #subprocess.call(['python', 'sy0001.py', 'abcd', 'ver0000', 'noby'])  # works but args not transfered
    #subprocess.call('python', 'sy0001.py', 'abcd', 'ver0000', 'noby')  buffer size error
    self.Destroy()


sy0001.py called by  sy0000.py

import wx 
class MyFrame( wx.Frame ):

    def __init__( self, parm1, *args, **kargs ): 
        wx.Frame.__init__ ( self, parm1, id = wx.ID_ANY, title = u"BioInformatics", pos = wx.DefaultPosition, size = wx.Size( 1200,700 ), style = wx.DEFAULT_FRAME_STYLE|wx.TAB_TRAVERSAL, *args, **kargs )

        print "sy0001 init "
        print args
        print "==ok="
        print kargs
        print "==2ok="
        print parm1
        print "==parm1ok="



    app = wx.App(False) 
    frame = MyFrame(None) 
    frame.Show(True) 
    #start the applications 
    app.MainLoop()
我已经测试了几种调用方法,但结果如下: sy0001初始化 () ==正常== {} ==2ok== 没有一个 ==parm1ok=

我使用的是win 10 python2.7 wxpython3.0,这些版本必须保留。
如果有人指出我做错了什么,我将不胜感激。或者win 10导致了这种情况?

当您向这样的脚本传递参数时,它们存储在
sys.argv

尝试替换:

frame = MyFrame(None) 


您不是在python中调用脚本
,而是将控制权传递给您的操作系统,因此参数只能从
sys.argv

关键字参数的概念同时也出现了。
您必须访问在命令行上传递的参数,忽略将作为脚本名称的参数0

import wx
import sys
my_args = sys.argv

class MyFrame(wx.Frame):
    def __init__(self, parent, *args, **kwds):
        wx.Frame.__init__(self, parent, title="BioInformatics", size=(400,300))
        print ("sy0001 init ")
        print (args)
        print ("==ok=")
        print (kwds)
        print ("==2ok=")
        #Convert args to a list to print out
        largs = [elem for i in args for elem in i]
        for item in largs:
            print (item)

app = wx.App(False)
frame = MyFrame(None, my_args[1:])
frame.Show(True)
app.MainLoop()
命令:

python sy0001.py 123 j=42 66
输出:

sy0001 init 
(['123', 'j=42', '66'],)
==ok=
{}
==2ok=
123
j=42
66

谢谢你的建议。我改为MyFram(无,**sys.argv),并收到一个错误,提示“在**之后键入对象参数必须是映射,而不是列表”,因此我改为MyFrame(无,sys.argv)。另一个错误是“参数由名称('id')和位置(2)给出”。我不明白错误的含义。NobySorry,那应该是
*sys.argv
而不是
**sys.argv
@noby因为你是新来的,答案旁边有一个灰色的勾号,上面有上下箭头。如果答案回答了您的问题,请单击灰色勾号以接受答案。如果答案没有回答问题,但有帮助,请单击向上箭头指示该答案有用。另一方面,如果答案是total tosh,请单击向下箭头,表示它根本没有帮助。我收到了您关于回答答案是否有帮助的消息,但我不知道灰色记号在哪里。如果我知道它在哪里,我会说这个答案完美地解决了我的问题。@noby嗨,在答案的左边你会看到一个向上的图标▲ 签下0和a▼ 签名这些都是用来上下投票的答案。下面是一个灰色的勾号✔ 签名这是用来接受答案的;如果单击它,它将变为绿色。
sy0001 init 
(['123', 'j=42', '66'],)
==ok=
{}
==2ok=
123
j=42
66