我有一个命令,拉打印机名称沿着IP地址的列表:
lpstat -v | awk '{sub(":", "", $3) sub("ipp://", "", $4) sub("/ipp/print", "", $4); print $3 ", " $4}'
PRINTER01, 192.168.25.200
PRINTER02, 192.168.24.200
...
我尝试使用subprocess.getoutput()
将这些信息拉入Python,如下所示:
printers = subprocess.getoutput("lpstat -v | awk '{sub(":", "", $3) sub("ipp://", "", $4) sub("/ipp/print", "", $4); print $3 ", " $4}'")
然而,上面的不工作,我似乎不能找出正确的方式来使用引号....或者也许我需要转义冒号?
我在运行上面的代码时收到的错误消息是:
printers = subprocess.getoutput("lpstat -v | awk '{sub(":", "", $3) sub("ipp://", "", $4) sub("/ipp/print", "", $4); print $3 ", " $4}'")
^
SyntaxError: invalid syntax
有人知道如何实现我正在努力做的事情吗?
谢谢
2条答案
按热度按时间von4xj4u1#
在
subprocess.getoutput()
的参数中每个双引号开始或结束一个字符串,导致一个字符串后跟一个冒号。
"lpstat -v | awk '{sub("
:
", "
", $3) sub("
ipp://
", "
", $4) sub("
/ipp/print
", "
", $4); print $3 "
,
" $4}'"
你必须转义字符串中的所有双引号。
如果你用单引号替换外面的双引号,你只需要转义两个单引号。
s4chpxco2#
正如你所注意到的,报价是问题所在。Python将最接近的未转义匹配引号匹配为关闭:
这在某些时候会变得很烦人,但是简单的单引号和双引号并不是编写Python字符串的唯一方法--你可以在同一行中使用多行字符串的强大功能!多行字符串是由三个相同的引号字符组成的,所以字符串主体中的单个字符不会破坏它!
所以你可以