python中执行sed命令操作源文件时出现错误
我想在python中执行一个sed命令,第一种方法直接指定文件时,可以正确输出结果,但是第二种我打开文件操作的时候就有问题,不知道什么原因,求高手解答?(1)>>>sed...
我想在python中执行一个sed命令,第一种方法直接指定文件时,可以正确输出结果,但是第二种我打开文件操作的时候就有问题,不知道什么原因,求高手解答?
(1)
>>> sedcmd="sed -n \'s/{//g; p\' /qye/python/mytestpython/tmp.txt"
>>> a=os.popen(sedcmd)
>>> a.readlines()
["'copy_reg': <module 'copy_reg' from'/usr/lib64/python2.6/copy_reg.pyc'>, 'encodings': <module 'encodings'from '/usr/lib64/python2.6/encodings/__init__.pyc'>, 'site': <module'site' from '/usr/lib64/python2.6/site.pyc'>, '__builtin__...module 'exceptions'(built-in)>, 'abrt_exception_handler': <module 'abrt_exception_handler'from '/usr/lib64/python2.6/site-packages/abrt_exception_handler.pyc'>, 'os':<module 'os' from '/usr/lib64/python2.6/os.pyc'>}\n", '\n']
>>>
(2)
>>> withopen("/qye/python/mytestpython/tmp.txt") as srcfile:
... sedcmd="sed -n \'s/{//g;p\' srcfile"
... a=os.popen(sedcmd)
...
>>> sed: can't read srcfile: No such file ordirectory 展开
(1)
>>> sedcmd="sed -n \'s/{//g; p\' /qye/python/mytestpython/tmp.txt"
>>> a=os.popen(sedcmd)
>>> a.readlines()
["'copy_reg': <module 'copy_reg' from'/usr/lib64/python2.6/copy_reg.pyc'>, 'encodings': <module 'encodings'from '/usr/lib64/python2.6/encodings/__init__.pyc'>, 'site': <module'site' from '/usr/lib64/python2.6/site.pyc'>, '__builtin__...module 'exceptions'(built-in)>, 'abrt_exception_handler': <module 'abrt_exception_handler'from '/usr/lib64/python2.6/site-packages/abrt_exception_handler.pyc'>, 'os':<module 'os' from '/usr/lib64/python2.6/os.pyc'>}\n", '\n']
>>>
(2)
>>> withopen("/qye/python/mytestpython/tmp.txt") as srcfile:
... sedcmd="sed -n \'s/{//g;p\' srcfile"
... a=os.popen(sedcmd)
...
>>> sed: can't read srcfile: No such file ordirectory 展开
1个回答
展开全部
你的范例里面,srcfile是一个python object,放到sedcmd字符串里面,sed会把它当文件名处理,自然找不到文件。这个问题可以用subprocess解决。
#!/usr/bin/env python2
# coding=utf-8
"""
specify stdin when using subprocess
"""
import subprocess
def main():
with open('/qye/python/mytestpython/tmp.txt', 'rb') as f:
o = subprocess.check_output(["sed", "-n", "s/{//g; p"], stdin=f)
# or:
# o = subprocess.check_output("sed -n 's/{//g; p'", shell=True, stdin=f)
if __name__ == '__main__':
main()
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询