在python中调用linux命令

时间:2012-12-14 23:26:14

标签: python subprocess os.system hardlink

  

可能重复:
  Equivalent of Backticks in Python

我正在寻找在Python中运行终端命令(ls -l)的最佳方法。我已经阅读了有关子流程的内容,但我完全不了解它,如果有人可以尝试让我了解正在发生的事情,我将不胜感激。我需要使用ls -l命令检索一个硬链接号,即!= 1,然后保存此号码以匹配其他地方的目录号码。现在我想知道如何获取硬链接号并使用子进程将其保存到变量(如果有的话,可以使用更好的方法)。

这是我到目前为止使用的代码:     #!的/ usr / bin中/ Python的

#tool that resolves time machine directories 

import os

#create output file 
os.chdir("/home/sean/Desktop")
hard_link_number = open('hardLinkNumber.log', 'w')

#move into mounted backup (figure out how to remove xe2 etc)
os.chdir("/mnt/Backups.backupdb/stuart dent\xe2\x80\x99s MacBook Pro/2010-08-10-160859/MAc")

#find hard link data 
print>>hard_link_number, os.system("ls -la")
hard_link_number.close()

os.system(" ls -la")输出我需要的信息,但不会将其保存到我创建的文件中。我在别处读到os.system不会输出数据。

2 个答案:

答案 0 :(得分:6)

您需要os.stat(特别是st_nlink属性)。

编辑:jwz来解释:有些人在遇到问题时会想“我知道,我会解析ls -l的输出。”现在他们有两个问题。

答案 1 :(得分:2)

您可以将file对象传递到stdout中的subprocess.call(),输出将保存到该文件中:

In [26]: import subprocess

In [27]: with open("data.txt","w") as f:
    subprocess.call("ls -la",stdout=f,shell=True)
   ....: