如何将python变量调用到linux命令中

时间:2017-01-28 13:20:44

标签: python python-2.7 python-3.x

我正在编写python脚本,在我的python脚本中,我想运行"目录中的文件列表"使用commands.getoutput,我的问题是"我在python变量中定义了目录路径,如" dir_name"。我尝试了以下。

dir_name="/user/pjanga/python_test"
index_list=commands.getoutput('ls -l',dir_name,'| 'wc -l')

错误: -

File "diii.py", line 10
    index_list=commands.getoutput('ls -l',dir_name,'| 'wc -l')
                                                        ^
SyntaxError: invalid syntax

你能帮帮我跑吗?

2 个答案:

答案 0 :(得分:2)

这里有几个问题,请尝试:

index_list = commands.getoutput('ls -l ' + dir_name + ' | wc -l')

字符串连接是+,而不是逗号,并且您的单引号数量不均匀。另请注意ls -l之后的空格。

但是,有更好的方法可以做到这一点。首先,答案并不代表目录中的文件数量。在命令行上执行ls -l,您将看到第一行是“total”,而不是文件名(这是历史记录,表示块的数量,并且非常无用)。

如果您使用ls代替ls -l,则不会遇到此问题。

但是,没有必要调用两个单独的外部程序,使用python:

import os
index_list = len([name for name in os.listdir(dir_name) ])

在这里我们调用os.listdir()并创建一个文件名列表,然后只获取该列表中的项目数。

在python中还有其他几种方法可以做到这一点。

答案 1 :(得分:0)

在Linux机器上有不同的方法从python执行命令。

方法1:

index_list = commands.getoutput('ls -l ' + dir_name + ' | wc -l')

方法2:

import os
os.system("ls -l ' + dir_name + ' | wc -l')

方法3:

import subprocess
index_list = subprocess.check_output('ls -l ' + dir_name + ' | wc -l, shell=True) 

希望它有所帮助!!