我在努力解决一个糟糕的问题。我有一个utils文件,其中包含一些通用方法和一个命令文件,其中存储了要在程序中使用的命令列表。但是,当尝试使用字符串格式清理文件时,我开始遇到问题。

# utils.py
import os

bin = '/usr/bin'
tool = '{0}/tool'.format(bin)
command = '{0} -dir %s -o geniso'.format(tool)

def exec_cmd(cmd):
    os.system(cmd)

# dowork.py
from utils import *
exec_cmd(command % '/var/tmp')

在您可以看到的示例中,我正试图通过连接变量来清理命令/实用程序,以减少变量中的字符数,这样做很好。问题是,当我试图用另一个变量(例如目录名(从另一个类传递过来)扩展该格式时,我对如何有效地进行这种格式化感到困惑。我还遇到了以下异常:
Traceback (most recent call last):
  File "some_script.py", line 12, in <module>
    import commands as cmd
  File "/var/tmp/commands.py", line 32, in <module>
    SOME_CMD = '{0} -p %s | tail -n +4 | awk \'{print \$4}\''.format(SOMETOOL)
KeyError: 'print \\$4'

我怎样才能清理这些乱七八糟的东西,使之能够很好地格式化我的命令文件,同时在脚本中使用这些命令时为进一步扩展留出空间。

最佳答案

如果要在格式化字符串中使用大括号,则必须对其进行转义,例如在示例中使用

SOME_CMD = '{0} -p %s | tail -n +4 | awk \'{{print \$4}}\''.format(SOMETOOL)

--注意print \$4周围的双大括号。
另一方面,连接系统调用的字符串被认为是一种非常糟糕的做法。如果不需要shell扩展和功能,可以使用subprocessapi,它允许您将参数作为列表而不是字符串传递。还有一个非常好的shhttp://amoffat.github.io/sh/)包,支持管道、外壳扩展等。

关于python - 字符串格式python,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/37457180/

10-12 12:40
查看更多