如何在Python的os.system中包装Shell命令?

0 投票
3 回答
1179 浏览
提问于 2025-04-17 15:29

可以获取一个名为 myFile.txt 的文件,里面的内容是:

file  '/home/debian/1.flv'  
file  '/home/debian/2.flv'  
file  '/home/debian/3.flv'  
file  '/home/debian/4.flv'  
file  '/home/debian/5.flv'  

现在我想在 Python 中处理这个文件。

os.system("seq  --format="file  '/home/debian/%G.flv'" 5 > myFile.txt" )    
File "<stdin>", line 1  
os.system("seq  --format="file  '/home/debian/%G.flv'" 5 > myFile.txt" )  
                             ^
SyntaxError: invalid syntax

如何在 Python 中处理它?

  1. 我知道如何在 Python 中创建这个文件(kvivek)。

  2. 我想了解如何在 Python 中使用复杂的 shell 命令,
    如果行数是一个变量的话该怎么做?

这里还有一个问题:

  1. @Torxed 提到的转义字符的方法

    >>> i=7    
    >>> os.system("seq --format=\"file '/home/debian/%G.flv'\" %d > myFile.txt" %i )  
    Traceback (most recent call last):  
      File "<stdin>", line 1, in <module>  
    TypeError: float argument required, not str  
    
  2. @ganachoco 的 三重引号的方法

    >>> os.system('''seq  --format="file  '/home/debian/%G.flv'" %d > myFile.txt" %i''')  
    sh: 1: Syntax error: Unterminated quoted string
    

需要考虑两种情况,

情况 1:
变量在 shell 中,我们可以这样做(我已经验证了以下两个 shell 命令):

root@debian:/home/debian# i=7
root@debian:/home/debian# seq --format="file '/home/debian/%G.flv'" $i > myFile.txt

如何使用 os.system 在 Python 中处理它?

>>> os.system('i=7')
0
>>> os.system("seq --format=\"file '/home/debian/%G.flv'\" $i > myFile.txt")
seq: missing operand
Try `seq --help' for more information.
256

变量在 Python 中,现在我想调用 shell 命令,把 Python 中的变量放到 shell 里,该怎么做呢?

>>> i=7  #in python prompt
>>> os.system("seq --format=\"file '/home/debian/%G.flv'\" `here i want to get value from python prompt` > myFile.txt")

3 个回答

0

希望这能给你带来你想要的东西

[root@localhost ~]# python
Python 2.6.6 (r266:84292, Apr 11 2011, 15:50:32)
[GCC 4.4.4 20100726 (Red Hat 4.4.4-13)] on linux2
Type "help", "copyright", "credits" or "license" for more information.
>>> import os
>>> cmdstr = """i=7 && seq --format="file '/home/kvivek/%G.flv'" $i > myFile.txt"""
>>> os.system(cmdstr)
0
>>> exit()
[root@localhost ~]# cat myFile.txt
file '/home/kvivek/1.flv'
file '/home/kvivek/2.flv'
file '/home/kvivek/3.flv'
file '/home/kvivek/4.flv'
file '/home/kvivek/5.flv'
file '/home/kvivek/6.flv'
file '/home/kvivek/7.flv'
[root@localhost ~]#
3

使用三重引号

os.system("""seq  --format="file  '/home/debian/%G.flv'" 5 > myFile.txt""")
3

用反斜杠来引用双引号

for i in (range(1,5)):
    os.system("seq  --format=\"file  '/home/debian/%d.flv'\" > myFile.txt" %i )

撰写回答