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
有两个脚本,一个用参数 (*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