将 python 代码与 Visual Studio c# 集成
Integrating python code with Visual Studio c#
我在 Visual Studio 2019 年创建了 GuI。
用户将输入用户名和密码,我必须将其传递给 python 脚本。当用户点击登录按钮时,python 脚本将被触发并显示输出。
我试过的 python 代码是:
import paramiko
import time
ssh = paramiko.SSHClient()
ssh.set_missing_host_key_policy(paramiko.AutoAddPolicy())
try:
hostname = input("Enter host IP address: ")
username = input("Enter SSH Username: ")
password = input("Enter SSH Password: ")
port = 22
ssh.connect(hostname, port, username, password, look_for_keys=False)
print("ssh login successfully")
#stdin,stdout,stderr = ssh.exec_command('show version')
#output = stdout.readlines()
#print(output)
Device_access = ssh.invoke_shell()
Device_access.send(b'environment no more \n')
Device_access.send(b'show version\n')
time.sleep(2)
output = Device_access.recv(65000)
print (output.decode('ascii'))
except:
print("error in connection due to wrong input entered")
但在本文中我不知道如何 link 通过输入进入 Gui c# 和 python 脚本。请让我知道我该怎么做。
提前致谢!
您可以使用参数来调用您的 Python 脚本。
更改 python 脚本:
import paramiko
import time
import sys # Used to get arguments
ssh = paramiko.SSHClient()
ssh.set_missing_host_key_policy(paramiko.AutoAddPolicy())
try:
hostname = sys.argv[1] # Skip 0th arg, since it is just the filename
username = sys.argv[2]
password = sys.argv[3]
port = 22
ssh.connect(hostname, port, username, password, look_for_keys=False)
print("ssh login successfully")
#stdin,stdout,stderr = ssh.exec_command('show version')
#output = stdout.readlines()
#print(output)
Device_access = ssh.invoke_shell()
Device_access.send(b'environment no more \n')
Device_access.send(b'show version\n')
time.sleep(2)
output = Device_access.recv(65000)
print (output.decode('ascii'))
except:
print("error in connection due to wrong input entered")
并将调用脚本的 C# 代码更改为如下所示:
Process pythonScript = new Process();
pythonScript.StartInfo.FileName = "Your python script";
pythonScript.StartInfo.Arguments = $"{YouHostnameVar} {YouUsernameVar} {YourPasswordVar}"; // Start the script with the credentials as arguments
pythonScript.Start();
有多种方法可以将 Python 脚本与 .NET C# 代码合并
我会尝试给出一个基本的概述,以及我的建议,但最终由您来决定什么最有效。
铁Python
IronPython 是一个实际的独立解释器,用于将 Python 代码翻译成 .NET 公共语言运行时 (CLR)。它适用于不依赖于某些库的简单 Python2 脚本。
Python.NET
Python.NET 使用普通的 Python 解释器。它只是提供了一种在 Python 脚本和 .NET 代码之间进行交互的方法。
系统诊断(我的建议)
系统诊断 C# 工具允许您将 运行 Python 脚本作为系统进程。并不是说这只是 运行 的 Python 脚本。为了在 Python 脚本和 C# 代码之间传输信息,您需要某种共享文件。我建议设置一个文件夹,用于保存 C# 和 Python 程序使用的信息。
有关系统诊断的简单实施以及有关调用系统诊断的特定方式的说明,请查看:https://www.dotnetlovers.com/article/216/executing-python-script-from-c-sharp
根据 Paul Sütterlin 的回答进行编辑
与使用文件共享信息相反,Paul 正确地指出您可以将信息作为参数传递。他还指出了 C# 中的简单过程工具,它比系统诊断更容易设置。我建议您阅读我链接的文章,看看哪种解决方案最适合您。系统诊断为您提供更多选项,但必须对其进行配置。
我在 Visual Studio 2019 年创建了 GuI。
用户将输入用户名和密码,我必须将其传递给 python 脚本。当用户点击登录按钮时,python 脚本将被触发并显示输出。
我试过的 python 代码是:
import paramiko
import time
ssh = paramiko.SSHClient()
ssh.set_missing_host_key_policy(paramiko.AutoAddPolicy())
try:
hostname = input("Enter host IP address: ")
username = input("Enter SSH Username: ")
password = input("Enter SSH Password: ")
port = 22
ssh.connect(hostname, port, username, password, look_for_keys=False)
print("ssh login successfully")
#stdin,stdout,stderr = ssh.exec_command('show version')
#output = stdout.readlines()
#print(output)
Device_access = ssh.invoke_shell()
Device_access.send(b'environment no more \n')
Device_access.send(b'show version\n')
time.sleep(2)
output = Device_access.recv(65000)
print (output.decode('ascii'))
except:
print("error in connection due to wrong input entered")
但在本文中我不知道如何 link 通过输入进入 Gui c# 和 python 脚本。请让我知道我该怎么做。
提前致谢!
您可以使用参数来调用您的 Python 脚本。
更改 python 脚本:
import paramiko
import time
import sys # Used to get arguments
ssh = paramiko.SSHClient()
ssh.set_missing_host_key_policy(paramiko.AutoAddPolicy())
try:
hostname = sys.argv[1] # Skip 0th arg, since it is just the filename
username = sys.argv[2]
password = sys.argv[3]
port = 22
ssh.connect(hostname, port, username, password, look_for_keys=False)
print("ssh login successfully")
#stdin,stdout,stderr = ssh.exec_command('show version')
#output = stdout.readlines()
#print(output)
Device_access = ssh.invoke_shell()
Device_access.send(b'environment no more \n')
Device_access.send(b'show version\n')
time.sleep(2)
output = Device_access.recv(65000)
print (output.decode('ascii'))
except:
print("error in connection due to wrong input entered")
并将调用脚本的 C# 代码更改为如下所示:
Process pythonScript = new Process();
pythonScript.StartInfo.FileName = "Your python script";
pythonScript.StartInfo.Arguments = $"{YouHostnameVar} {YouUsernameVar} {YourPasswordVar}"; // Start the script with the credentials as arguments
pythonScript.Start();
有多种方法可以将 Python 脚本与 .NET C# 代码合并
我会尝试给出一个基本的概述,以及我的建议,但最终由您来决定什么最有效。
铁Python
IronPython 是一个实际的独立解释器,用于将 Python 代码翻译成 .NET 公共语言运行时 (CLR)。它适用于不依赖于某些库的简单 Python2 脚本。
Python.NET
Python.NET 使用普通的 Python 解释器。它只是提供了一种在 Python 脚本和 .NET 代码之间进行交互的方法。
系统诊断(我的建议)
系统诊断 C# 工具允许您将 运行 Python 脚本作为系统进程。并不是说这只是 运行 的 Python 脚本。为了在 Python 脚本和 C# 代码之间传输信息,您需要某种共享文件。我建议设置一个文件夹,用于保存 C# 和 Python 程序使用的信息。
有关系统诊断的简单实施以及有关调用系统诊断的特定方式的说明,请查看:https://www.dotnetlovers.com/article/216/executing-python-script-from-c-sharp
根据 Paul Sütterlin 的回答进行编辑
与使用文件共享信息相反,Paul 正确地指出您可以将信息作为参数传递。他还指出了 C# 中的简单过程工具,它比系统诊断更容易设置。我建议您阅读我链接的文章,看看哪种解决方案最适合您。系统诊断为您提供更多选项,但必须对其进行配置。