在Visual Basic 2015和Python之间传递变量

时间:2018-04-01 19:57:21

标签: python vb.net visual-studio-2015

我正在研究调用Python 2.7程序的Visual Basic 2015中的代码。现在我试图将一个变量“arg1 = 1”从VB传递给Python。这是VB代码:

from sys import argv

script = argv

import matplotlib.pyplot as plt
import matplotlib as mpl
import numpy as np

msg= script
msg= "Hello Wolrd"
print(msg)
arg1= 1
x = np.linspace(0, 20, 100)
plt.plot(x, np.sin(x*arg1))
plt.show()

正如您所看到的,当我单击表单中的按钮时,代码会激活。当我不尝试传递“arg1”时,按钮工作正常,因为python代码显示了一个带有正弦图的窗口。 arg1的值将改变正弦曲线图的周期。

这是Python代码,非常简单。我刚开始学习使用Python。我不是在学习Python,只是为了学习它。我只需要Python来执行一些最终将在VB程序中使用的数学库:

{{1}}

我最终想要传递一个指向Python的指针,因为我将传递一个数组,并且我认为如果它大约是100x100浮点数,则数组更容易作为指针传递。

1 个答案:

答案 0 :(得分:0)

您的VB代码只是将1作为命令行参数传递,这很好 - 尽管您可能需要更改它以在脚本名称后添加空格。

因此,在您的Python代码中,sys.argv[1]将是字符串"1",因为这是数字1的字符串表示形式。

您可以将其转换为intfloat的数字(取决于它是否始终为整数,或者可能类似于1.5)。

出于某种原因,您已将argv复制到另一个名为script的变量中,然后复制到另一个名为msg的变量中,然后将其忽略,将msg替换为"Hello Wolrd"字符串1,只是将常量arg1分配给from sys import argv arg1 = float(argv[1]) 。而不是所有这些,做到这一点:

sys.stdin

就是这样。

但是...

  

我最终想要传递一个指向Python的指针,因为我将传递一个数组,并且我认为如果它大约是100x100浮点数,则数组更容易作为指针传递。

你不能这样做。命令行参数只能是一些简短的字符串,而不是巨大的东西,而不是你不能轻易地转换为字符串的东西,并且绝对不能指向你自己的内存。

在这种情况下,您通常要做的是:

  1. 让VB以一种漂亮的格式(如CSV或JSON)将数组导出为文件,将文件名作为命令行参数传递,并让Python从文件中导入数组。
  2. 让VB以一种不错的格式将数组转换为字符串,并将其作为标准输入传递给Python,并让Python从import json import sys with open(sys.argv[1], 'rb') as f: arr = json.load(f) 解析它。
  3. 第一个可能更简单一些(因为您不必学习如何写入子进程的stdin管道)。我不知道如何编写VB的那一面,但Python方面看起来像这样:

    arr = np.array(arr)
    

    然后,如果你想将它从列表列表转换为numpy 2D数组,那么你可以将其与任何其他值相同:

    ./app.js