编写python代码以在主终端中执行命令,但是我需要包括“”及其不工作

2024-10-03 21:36:08 发布

您现在位置:Python中文网/ 问答频道 /正文

我正在写一段代码,在中间我希望它进入主终端并剥离我的数据集[]和'',但是当我包含''部分时,python认为我刚刚完成了字符串(我认为)是否有其他方法可以做到这一点。这是我的密码:

com=['cat new.txt | tr -d "s/,[]''*//g" >meantenbri.txt']
s0=''
com=s0.join(com)
res=os.system(com)

python没有意识到我希望在终端中执行整行,特别是中间部分的“”。你知道吗


Tags: 数据方法字符串代码txtcom终端密码
3条回答

请改用三重引号字符串:

com = ["""cat new.txt | tr -d "s/,[]''*//g" >meantenbri.txt"""]

python实际上有4种引号供您使用:

'...'
"...:
"""..."""
'''...'''

(三重报价品种也适用于多行):

"""foo
bar"""

当然,如果你真的很拮据,你可以用反斜杠转义引号,但由于有这么多不同类型的引号在你的支配下,似乎应该很少有必要。你知道吗

'cat new.txt | tr -d "s/,[]''*//g" >meantenbri.txt2'没有做你认为应该做的事情,例如:

>>> print 'cat new.txt | tr -d "s/,[]''*//g" >meantenbri.txt2'
cat new.txt | tr -d "s/,[]*//g" >meantenbri.txt2

请注意,中间的两个单引号不见了,这是因为实际上有两个单独的字符串并排出现,'cat new.txt | tr -d "s/,[]'
'*//g" >meantenbri.txt2',解释器将这些字符串连接在一起。要在字符串中实际包含这些单引号,有两个选项:

  • 使用三重引号:
    com = """cat new.txt | tr -d "s/,[]''*//g" >meantenbri.txt2"""
  • 转义中间的单引号:

    com = 'cat new.txt | tr -d "s/,[]\'\'*//g" >meantenbri.txt2'
    

请注意,整个com = [...]s0 = ''com = ''.join(com)实际上是不必要的,只需通过移除方括号从一开始将com创建为字符串即可。你知道吗

作为补充说明,^{}os.system()更适合运行外部程序。我认为在这种情况下,它会像这样(未经测试):

import subprocess
cmd = ['tr', '-d', "s/,[]''*//g"]
p = subprocess.Popen(cmd, stdin=open('new.txt'),
                     stdout=open('meantenbri.txt2', 'w'))
p.communicate()
res = p.returncode

尽管Sven在评论中提到了这一点,但您首先不应该使用外部程序。你知道吗

com=['cat new.txt | tr -d "s/,[]\'\'*//g" >meantenbri.txt2']

用\

相关问题 更多 >