1

我正在尝试通过 Python 脚本编写脚本文件

为此,我定义了一个打开、写入和关闭文件的函数 def funcToCreateScript(filename,filecontent)

我有另一个函数,我正在调用funcToCreateScript它并试图通过变量传递它的 shell 脚本内容。问题是当我如下格式化文本时

def createfile():
    var = """#!/bin/sh
             echo ${test}
          """
    funcToCreateScript(filename,var)

我得到脚本的输出为 -

#!/bin/sh
         echo ${test}

因此,它采用函数的缩进并相应地编写它。有没有办法格式化它,使它看起来像

#!/bin/sh
echo ${test}

例如 -

def main():
    var = """
        #!/bin/sh
        echo ${test}
        """
    print var

main()

 > test.py

                #!/bin/sh
                echo ${test}
4

5 回答 5

3

一种方法是使用textwrap.dedent

textwrap.dedent(文本

从文本的每一行中删除任何常见的前导空格。

这可用于使三引号字符串与显示的左边缘对齐,同时仍以缩进形式在源代码中显示它们。

import textwrap

def createfile():
    var = """\
          #!/bin/sh
          echo ${test}
          """
    var = textwrap.dedent(var)
    funcToCreateScript(filename, var)

请注意,\在开始的三引号之后立即插入,以避免出现空行。

于 2012-12-01T00:08:49.540 回答
2

这里有两种解决方案,或者使用换行符('\n'),所以它看起来像:

def createfile():
    var = """#!/bin/sh\necho ${test}"""
    funcToCreateScript(filename,var)

请记住,如果您使用这种技术(这是一个非常讨厌的解决方案 - 请参阅下文以获得更好的替代方案),并且您希望看到您需要的输出print()(假设此处为 Python 3.0 标准)。

或者,只需执行以下操作:

def createfile():
    involved. 
    var = """#!/bin/sh
echo ${test}
          """
    return funcToCreateScript(filename,var)

我不确定您是如何进行funcToCreateScript设置的,但这里有一些试用代码,因此您可以看到它的运行情况(复制并粘贴到交互式解释器或新的 python 文件中并运行):

def createfile():
    var = """
#!/bin/sh
echo ${test}
          """
    return var

v = createfile()

如果您想花哨但仍使其可读,则可以使用 lstrip(" ") 它将删除左侧的所有空白。

def createfile():
    var = """#!/bin/sh
             echo ${test}
          """
    script_txt = ""

    for line in var:
        script_txt += line.lstrip(" ")

    return script_txt

v = createfile()

只是厌倦了最后一个解决方案,因为如果你有你打算在那里的空格,那么它会去掉它(我个人喜欢我列出的选项 2)。

于 2012-11-30T23:57:43.267 回答
1

如果变量的最后一行只包含空格,并且它的长度是应该从var除第一行之外的行的开头删除的空格数,请考虑如下代码:

v = var.split('\n')
s = len(v[-1])
var = v[0]+'\n'+'\n'.join(map(lambda x: x[s:], v[1:]))

s会从除第一行之外的行的前面去除多余的字符。如果使用制表符完成某些对齐,上述可能会导致问题;有人可能想要使用字符串替换而不是数组切片。

于 2012-12-01T00:11:44.477 回答
0

试试这个:

var = """#!/bin/sh\necho ${test}"""
于 2012-12-01T00:00:17.323 回答
0

另一种选择 - 隐式连接:

def createfile():
    var = (
        "#!/bin/sh\n"
        "echo ${test}"
    )
于 2012-12-01T00:31:55.523 回答