我正在研究调用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浮点数,则数组更容易作为指针传递。
答案 0 :(得分:0)
您的VB代码只是将1
作为命令行参数传递,这很好 - 尽管您可能需要更改它以在脚本名称后添加空格。
因此,在您的Python代码中,sys.argv[1]
将是字符串"1"
,因为这是数字1
的字符串表示形式。
您可以将其转换为int
或float
的数字(取决于它是否始终为整数,或者可能类似于1.5
)。
出于某种原因,您已将argv
复制到另一个名为script
的变量中,然后复制到另一个名为msg
的变量中,然后将其忽略,将msg
替换为"Hello Wolrd"
字符串1
,只是将常量arg1
分配给from sys import argv
arg1 = float(argv[1])
。而不是所有这些,做到这一点:
sys.stdin
就是这样。
但是...
我最终想要传递一个指向Python的指针,因为我将传递一个数组,并且我认为如果它大约是100x100浮点数,则数组更容易作为指针传递。
你不能这样做。命令行参数只能是一些简短的字符串,而不是巨大的东西,而不是你不能轻易地转换为字符串的东西,并且绝对不能指向你自己的内存。
在这种情况下,您通常要做的是:
import json
import sys
with open(sys.argv[1], 'rb') as f:
arr = json.load(f)
解析它。第一个可能更简单一些(因为您不必学习如何写入子进程的stdin管道)。我不知道如何编写VB的那一面,但Python方面看起来像这样:
arr = np.array(arr)
然后,如果你想将它从列表列表转换为numpy 2D数组,那么你可以将其与任何其他值相同:
./app.js