从 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从串口读取

VB6.0中如何实现逐行读入文本文件?

Python:使用参数(变量)执行shell脚本,但在shell脚本中未读取参数

less 文件少一行, python -join -write ,shell 逐行读取

Python 读取指定行数

python和shell都可以读取的配置文件