繁体   English   中英

Linux cat命令在python中无法正常工作

[英]Linux cat command is not working properly in python

我写了一个脚本来从文件中获取一些信息。

 #!/usr/bin/python
 import pxssh
 import os
 import sys
 path = os.getcwd()
 conf = sys.argv[1]
 print type(path)
 print type(conf)
 print path
 print conf
 HOST_IP=os.system("cat %s/%s | grep 'HOST_IP'| cut -d '=' -f2")%(path,conf)

这是我遇到的错误。

`[root@135 bin]# ./Jboss64.py ../conf/samanoj.conf
<type 'str'>
<type 'str'>
/root/Sanity/bin
../conf/samanoj.conf   --> This is the file present under conf folder
cat: %s/%s: No such file or directory
Traceback (most recent call last):
  File "./Jboss64_EA_EM_FM.py", line 11, in <module>
    LIVEQ_HOST_IP=os.system("cat %s/%s | grep 'LIVEQ_HOST_IP'| cut -d '=' -f2")%(path,conf)
TypeError: unsupported operand type(s) for %: 'int' and 'tuple'`

请帮助我解决此问题。

您应该这样写:

os.system("cat %s/%s | grep 'HOST_IP'| cut -d '=' -f2" % (path,conf))

在您的表达式中,只有在执行格式字符串运算符之后才首先在os.system中执行。 os.system返回0 ,这就是为什么你得到这个错误

如果使用format方法会更好:

os.system("cat {}/{} | grep 'HOST_IP'| cut -d '=' -f2".format(path, conf))

如果使用subprocess.Popen而不是os.system也会更好

Popen("cat {}/{} | grep 'HOST_IP'| cut -d '=' -f2".format(path, conf), shell=True)

有几件事情可能会有所帮助:

  1. os.system被弃用,我建议你使用subprocess.Popen文件位置: https://docs.python.org/2/library/subprocess.html
  2. 您在哪里:

    LIVEQ_HOST_IP=os.system("cat %s/%s | grep 'LIVEQ_HOST_IP'| cut -d '=' -f2")%(path,conf)

在Python中构造字符串,然后传递给bash可能会更容易。 所以像这样:

output_str = "cat " +str(path) + "/" + str(conf) + " | grep 'LIVEQ_HOST_IP'| cut -d '=' -f2" 
LIVEQ_HOST_IP=subprocess.Popen(output_str)

subprocess (和os )使用一个用于调用系统函数的字符串,因此在传递给Popen之前,请确保该字符串正确。 希望这可以帮助。

你可以试试:

cmd = "cat {}/{} | grep 'HOST_IP'| cut -d '=' -f2".format(str(path), str(conf))
HOST_IP = subprocess.Popen(cmd)

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM