Visual Basic 2015与Python 2.7之间的变量传递问题
解决VB 2015调用Python 2.7传递参数的问题
我看到你在尝试用VB 2015调用Python 2.7脚本并传递参数,目前的代码里有个关键小问题导致参数无法正确传递——咱们一步步来修正它!
问题所在
你的VB代码里,参数拼接的部分少了一个空格:
.StartInfo.Arguments = ("HelloWorld.py" & arg1)
这样拼接出来的结果是HelloWorld.py1,Python会把这个当成完整的脚本文件名,而不是HelloWorld.py加上参数1,自然无法正确识别你要传递的变量。
修正后的VB代码
只需要在脚本名和参数之间加个空格,同时如果需要捕获Python的输出,记得补充配置UseShellExecute=False和RedirectStandardOutput=True(如果你的代码没写完的话):
Private Sub FWHM_Click(sender As Object, e As EventArgs) Handles FWHM.Click Dim pythonProcess As New Process() Dim arg1 As Integer = 1 ' 简化变量初始化 With pythonProcess .StartInfo.FileName = "pythonw.exe" .StartInfo.WorkingDirectory = "C:\Users\...\" ' 替换成你的实际脚本目录 .StartInfo.Arguments = "HelloWorld.py " & arg1 ' 这里加了空格分隔脚本和参数 .StartInfo.RedirectStandardOutput = True ' 如果需要捕获输出的话开启 .StartInfo.UseShellExecute = False ' 开启重定向必须设置这个为False .StartInfo.CreateNoWindow = True ' 可选:不显示Python窗口 .Start() ' 可选:读取Python脚本的输出 Dim output As String = .StandardOutput.ReadToEnd() .WaitForExit() ' 可以在这里处理output,比如显示到界面 End With End Sub
对应的Python 2.7脚本(HelloWorld.py)
要接收VB传递的参数,需要用sys.argv模块,注意sys.argv[0]是脚本本身的名字,sys.argv[1]才是你传递的arg1,记得把字符串转成整数:
import sys if __name__ == "__main__": # 检查是否有参数传递进来 if len(sys.argv) > 1: arg1 = int(sys.argv[1]) print("从VB收到的参数:", arg1) # 这里写你的业务逻辑 else: print("没有收到参数")
额外提示
- 如果后续要传递字符串参数,尤其是包含空格的字符串,记得用双引号包裹,比如:
.StartInfo.Arguments = "HelloWorld.py """ & "带空格的参数" & """" - 确保
pythonw.exe的路径正确,如果系统环境变量里没配置Python,可能需要写完整路径,比如C:\Python27\pythonw.exe
内容的提问来源于stack exchange,提问作者alvaro
相关产品推荐
相关产品推荐

