0

在 Python 中传递两个或多个 sys.argv 参数时,我有一个小问题。我使用以下代码进行操作。

from visa import *
import sys
inst = instrument(sys.argv[1])
inst.write("*rst; status:preset; *cls")
inst.write("voltage:UNIT Vrms")
inst.write("apply:SIN %s %s" % sys.argv[2] % sys.argv[3])

但是这段代码不会产生任何答案。

但是,如果我传递相同的代码并使用该代码嵌入值

from visa import *
import sys
inst = instrument("USB0::0x164E::0x13EC::TW00008555")
inst.write("*rst; status:preset; *cls")
inst.write("voltage:UNIT Vrms")
inst.write("apply:SIN 1000, 0.5")

我得到结果。

有什么我想念的吗?sys.argv任何帮助对于在 Python中传递两个以上的 's 都会非常有用。

4

2 回答 2

4

您想将元组传递给字符串格式:

>>> "test %s %s" % ("a", "b")
'test a b'

您当前执行此操作的方式不起作用,因为您告诉它执行两次格式化操作,将第三个参数插入第二个参数。

请注意,在新代码中,str.format()字符串格式化的首选方法是:

>>> "test {0} {1}".format("a", "b")
'test a b'

所以你会使用,例如:

inst.write("apply:SIN {0}, {1}".format(sys.argv[2], sys.argv[3]))

这存在于 Python 2.6 及更高版本中,并且应该在模运算符上使用。

于 2012-05-08T12:17:31.323 回答
1

可能字符串格式不好,您应该尝试:

inst.write("apply:SIN %s %s" % (sys.argv[2], sys.argv[3]))

在第二个片段中还有一个额外的逗号,所以也许:

inst.write("apply:SIN %s, %s" % (sys.argv[2], sys.argv[3]))
于 2012-05-08T12:20:30.460 回答