wxpython 传递参数

wxpython transfer argument

有两个脚本,一个用参数 (*args) 调用另一个,另一个被调用并显示一个表单,显示一个表单工作正常但没有从调用脚本传输参数。我尝试通过命令行 运行 调用的脚本并得到相同的结果。这是两个脚本的片段 python 2.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初始化 () ==好的== {} ==2确定== None ==parm1ok=

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

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

尝试替换:

frame = MyFrame(None) 

import sys
frame = MyFrame(None, *sys.argv)

您不是在调用脚本 within 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