python如何使用os.popen识别:在linux命令中?

python如何使用os.popen识别:在linux命令中?,python,Python,当我在打印站点名称时,它会显示文件中写入的所有数据,但无法识别:“ 和{print$1} 那么我如何纠正这个问题呢 谢谢,我看不清你做了什么,但似乎 site_name = os.popen('cat /home/xmp/distribution/sites.conf|awk -F ":" '{print $1}'') SITE_NAME = site_name.read().replace('\n', '') 绝对是错误的语法,所以它根本不应该运行 在字符串内部,应将's替换为\'s 如果您

当我在打印站点名称时,它会显示文件中写入的所有数据,但无法识别:“ 和
{print$1}

那么我如何纠正这个问题呢


谢谢,

我看不清你做了什么,但似乎

site_name = os.popen('cat /home/xmp/distribution/sites.conf|awk -F ":" '{print $1}'')
SITE_NAME = site_name.read().replace('\n', '')
绝对是错误的语法,所以它根本不应该运行

在字符串内部,应将
'
s替换为
\'
s

如果您习惯于使用
子流程
模块而不是
os.popen()
,那就更好了

最好是这样做

import subprocess
sp = subprocess.Popen('cat /home/xmp/distribution/sites.conf|awk -F ":" \'{print $1}'\', shell=True, stdout=subprocess.PIPE)
SITE_NAME = sp.stdout.read().replace('\n', '')
sp.wait()

我将完全跳过外部过程:

with open("/home/xmp/distribution/sites.conf", "r") as txtfile:
    sp = subprocess.Popen(['awk', '-F', ':', '{print $1}'], stdin=txtfile, stdout=subprocess.PIPE)
    SITE_NAME = sp.stdout.read().replace('\n', '')
    sp.wait()

如果您的
awk
脚本并不比这更复杂,那么您可能希望使用其他地方提到的纯Python实现

否则,一个简单的解决办法是将最外层的
替换为

这应该可以工作,而无需转义最内部的
s

作为旁注,
cat
在这里是无用的:

site_name = os.popen("""cat /home/xmp/distribution/sites.conf|awk -F ":" '{print $1}'""")
SITE_NAME = site_name.read().replace('\n', '')
简化一下:

site_name = os.popen("""awk -F ":" '{print $1}' /home/xmp/distribution/sites.conf""")

阅读文件并在
python
中解析字符串。没有理由求助于
awk
。只是为了澄清我在bash:cat/home/xmp/distribution/sites.conf中执行命令的时间:“{print$1}”'它将从文件中获取第一个字段,文件sites.conf看起来是这样的:Samara:10.141.110.4:10.141.110.20所以输出:将是Samara,那么我如何在python中使用os.popen?@user301301301312实现它呢?正如我上面写的,字符串中的
'
替换为
\
。另一种方法是使用
'”
样式字符串:
“cat/home/xmp/distribution/sites.conf | awk-F”:“{print$1}'”
。我可以将所有这些以open(“/home/xmp/distribution/sites.conf”,“rt”)作为txtfile:fields=line.split(“:”)打印字段[0]中的行的txtfile:在某些变量中??您已经在字段中有了值,如果需要可以保存这些值。mgmt_ip_1=os.popen(““”cat/home/xmp/distribution/sites.conf | awk-F:“{print$2}””)mgmt_ip_1=site_name.read()。替换('\n','')为什么我对第二个字段执行此操作?在另一条评论中提供的“samara”示例中效果很好
site_name = os.popen("""cat /home/xmp/distribution/sites.conf|awk -F ":" '{print $1}'""")
SITE_NAME = site_name.read().replace('\n', '')
site_name = os.popen("""awk -F ":" '{print $1}' /home/xmp/distribution/sites.conf""")
site_name = os.popen("awk -F ':' '{print $1}' /home/xmp/distribution/sites.conf")