从 VB6 读取 python shell 行
Posted
技术标签:
【中文标题】从 VB6 读取 python shell 行【英文标题】:Reading python shell line from VB6 【发布时间】:2018-01-31 16:50:52 【问题描述】:我有一个 python 脚本,它打印一个文件路径。 我需要将该结果转换为可以在我的 vb6 程序中用作变量的字符串。This is the output of the script
我尝试了在网上找到的不同代码,但没有一个有效。 无论如何我都会发布它们,因为这可能是我的错误。
Private Sub Command1_Click()
Dim wscript As Object
Dim objShell As Object
Dim objExecObject As Object
Set objShell = wscript.CreateObject("WScript.Shell")
Set objExecObject = objShell.Exec("python.exe /k Get_Info.py")
Text1.Text = ""
Do While Not objExecObject.StdOut.AtEndOfStream
Text1.Text = Text1.Text & vbCrLf & objExecObject.StdOut.ReadLine()
Loop
End Sub
有了这个,我不太清楚如何声明这 3 个变量,所以我不确定它不起作用
Private Sub Command4_Click()
Shell "python.exe Get_Info.py folder", vbMaximizedFocus
Sleep 1000
MsgBox Command$
End Sub
这个反而没有得到任何东西。将 Command$ 返回为 "" 我也试过打字
script = App.path & "\" & "Get_Info.py"
path = Shell("python.exe script & parameter ", vbMaximizedFocus)
Sleep 1000
MsgBox path
每次单击时我都会得到一个不同的 4 位数字作为输出,但没有路径痕迹。
请帮我解决这个问题 :) 谢谢
【问题讨论】:
【参考方案1】:Set WshShell = WScript.CreateObject("WScript.Shell")
Set wmic = WshShell.Exec("cmd /c echo hello")
Do While wmic.Status = 0
WScript.Sleep 100
Loop
Decoded = Replace(wmic.StdOut.ReadAll, vbcrlf, "")
注意我使用 ReadAll 而不是循环。这是可以粘贴到 VB6 中的 VBScript。您可以在 VB6 中使用早期绑定和 Dim
您的对象为 Dim x As WshShell
在将引用(项目菜单)添加到 Windows 脚本宿主对象模型 之后,它的方法调用速度要快得多(尽管执行一次您不会注意到)。
Python 也可以使用 COM 对象。
更新
如您所知,使用app.path
无法保证系统配置,也不应更改用户环境 - 除非使您的程序可用(即开始菜单)。
VB6 prorams,除了简单的程序,需要安装在电脑上。仅仅因为它可以在具有 VB6 开发环境的计算机上工作,并不意味着它可以在不安装的情况下在其他地方工作。使用插件菜单上的打包和部署向导。
但是应用程序目录(即app.path
)只能由管理员写入。程序使用 AppData 目录存储它们需要创建、写入或读取但不供用户打开的文件。
用户的数据进入文档、图片、视频等。
要获取您使用的这些文件夹(有很多来自不同 Windows 时代的功能)其中之一,例如 https://msdn.microsoft.com/fr-fr/library/0ea7b5xe(v=vs.84).aspx。
对于您正在使用的软件时代,请参阅 Windows 2000 指南,我选择了 Microsoft Windows 2000 桌面应用程序设计指南构建商业应用程序的应用程序规范https://msdn.microsoft.com/en-us/library/ms954115.aspx
https://msdn.microsoft.com/en-us/library/ms954375.aspx
https://msdn.microsoft.com/en-us/library/bb742580.aspx
https://msdn.microsoft.com/en-us/library/ms954371.aspx
【讨论】:
我正在尝试使用您的代码,但结果表明我需要声明“WScript”。我该怎么做?我的意思是它是什么类型的变量?我也需要对'wmic'做同样的事情吗?抱歉,自从我停止使用 VB 以来已经很长时间了,所以我忘记了很多事情:) 我刚刚将它们声明为“Dim WScript”,但没有说明类型,但现在它说需要对象... 您必须添加参考。在将参考(项目菜单)添加到 Windows 脚本宿主对象模型之后。或者根本不改变它。 错误似乎在“ Set WshShell = Wscript.CreateObject("WScript.Shell")”中Set WshShell = CreateObject("WScript.Shell")
Ops 我使用的是 WSH 的 CreateObject
而不是 VB 的 CreateObject
。以上是关于从 VB6 读取 python shell 行的主要内容,如果未能解决你的问题,请参考以下文章
Python:使用参数(变量)执行shell脚本,但在shell脚本中未读取参数