在Python中传递两个以上的sys.argv

时间:2012-05-08 12:15:24

标签: python parameter-passing visa

我在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")

我得到了结果。

我有什么遗失的吗?任何帮助对于在Python中传递两个以上的sys.argv非常有用。

2 个答案:

答案 0 :(得分: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及更高版本中,应该在模数运算符上使用。

答案 1 :(得分: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]))