如何解决从 Visual Basic 6 写入 Python Shell
我有一个 python 模块 'Cal.py' 如下:
def Plus(a,b):
a1 = int(a)
b1 = int(b)
result = a1 + b1
return result
def Minus(a,b):
a1 = int(a)
b1 = int(b)
result = a1 - b1
return result
在 Windows 10 中,我可以从 'cmd.exe' 以交互方式调用带有参数的函数:
D:\vb_python_SO>python
Python 3.8.5 (tags/v3.8.5:580fbb0,Jul 20 2020,15:57:54) [MSC v.1924 64 bit (AMD64)] on win32
Type "help","copyright","credits" or "license" for more information.
>>> import Cal
>>> Cal.Plus(2,3)
5
>>> Cal.Minus(5,3)
2
>>>
我想做与 Visual Basic 6 完全相同的事情。 也就是说,VB6 的函数调用文本需要写在“>>>”之后,并且应该跟“Return”键。 但我还没有找到任何好的解决方案。
我尝试了以下方法:
- VB6 'Shell ("cmd /k python.exe")' 可以做上半部分,但在 '>>>' 之后不能继续。
- 编写一个*.bat(或*.py),其中还包括python函数调用脚本。 用Shell命令执行可以更进一步,但不能交互调用函数,不能从VB6文本框中逐个更新参数。
附加信息)
我的目标是制作一个用于调用 Python 函数的 VB6 GUI 程序。我需要控制测量传感器某些特性的仪器。
更具体地说,
MyTester.py
def Init(_sensor_name='')
#Sensor Initialization Process
def GetExposure()
#Read Present Exposure Time from Sensor Register
def SetExposure(Exposure_Time)
#Write Exposure Time to Sensor Register
def FindExposure(...)
def MoveAbsolute(Rotation_Degee_A)
#Rotate Table to Absolute Angle
def MoveRelative(Rotation_Degee_R)
#Rotate Table by Relative Angle
def Roundtrip(...)
...
目前,函数调用在 Python Shell 中以交互方式执行。如果我制作一个 VB6 GUI 程序会变得更容易。注意 Init() 函数应该首先被调用,其他的函数调用紧随其后。
解决方法
我尝试过“Sendkeys”方法,发现它非常适合我的目的。添加了一些技巧以获得完整性。这是我的代码:
''''''''''''''''
'Form1.frm '
''''''''''''''''
Private Declare Sub Sleep Lib "kernel32.dll" (ByVal dwMilliseconds As Long)
'Declare for using sleep function'
Dim RetVal As Integer
Private Sub Command3_Click()
'Prepare to call the functions in python module'
RetVal = Shell("cmd",vbNormalFocus) 'Call DOS Cmd window'
Sleep (1000) 'Allow time for Shell Execution'
Sendkeys ("d:")
Sendkeys ("{ENTER}")
Sendkeys ("python") 'Call Python Shell'
Sendkeys ("{ENTER}")
Sleep (1000) 'Allow time for Python Execution'
Sendkeys ("import Cal") 'Import the Python Module'
Sendkeys ("{ENTER}")
End Sub
Private Sub Command4_Click()
'Execute to call each function in python module'
AppActivate (RetVal)
'Re-Obtain the App Focus. RetVal is the ProcessID of the running DOS Cmd Window.'
Sendkeys ("Cal.Plus" + "+9" + Text1.text + "," + Text2.text + "+0")
' Arguments come from Text1.txt and Text2.txt'
' "(" --> "+9" and ")" --> "=0" according the Sendkeys convention.'
Sendkeys ("{ENTER}")
End Sub
''''''''''''''''''
' Module1.bas '
''''''''''''''''''
Public Sub Sendkeys(text As Variant,Optional wait As Boolean = False)
'Replacing Sendkeys Sub to keep from the Error "Permission Denied".'
'This code overrides the existing Sendkeys.'
Dim WshShell As Object
Set WshShell = CreateObject("wscript.shell")
WshShell.Sendkeys CStr(text),wait
Set WshShell = Nothing
以上只是简单代数 (Cal.py) 的一个示例,但我相信该方法适用于我的实际应用程序。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。