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



我在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都非常有用。

你想将元组传递到字符串格式中:

>>> "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 及更高版本中,应该在模运算符中使用。

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

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

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

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

最新更新