我正在尝试通过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}
e.g。 -
def main():
var = """
#!/bin/sh
echo ${test}
"""
print var
main()
> test.py
#!/bin/sh
echo ${test}
答案 0 :(得分:3)
一种方法是使用textwrap.dedent:
<强> textwrap.dedent(强> 文本的)强>
从文本的每一行中删除任何常见的前导空格。
这可以用来使三引号字符串与显示的左边缘对齐,同时仍然以缩进的形式在源代码中显示它们。
import textwrap
def createfile():
var = """\
#!/bin/sh
echo ${test}
"""
var = textwrap.dedent(var)
funcToCreateScript(filename, var)
请注意,在打开三重引号后会立即插入\
,以避免出现空行。
答案 1 :(得分: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)。
答案 2 :(得分:1)
如果变量的最后一行只包含空格,并且其长度是应该从除{1}之外的var
行开头删除的空格数,请考虑如下代码:
v = var.split('\n')
s = len(v[-1])
var = v[0]+'\n'+'\n'.join(map(lambda x: x[s:], v[1:]))
这会从第一行以外的行前面删除s
个额外字符。如果使用制表符进行某些对齐,则上述操作可能会导致问题;可能想要使用字符串替换而不是数组切片。
答案 3 :(得分:0)
试试这个:
var = """#!/bin/sh\necho ${test}"""
答案 4 :(得分:0)
另一种选择 - 隐式连接:
def createfile():
var = (
"#!/bin/sh\n"
"echo ${test}"
)