我在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
非常有用。
答案 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]))