0

重複の可能性:
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がデータを出力しないことを他の場所で読みました。

4

2 に答える 2

6

必要なものos.stat(具体的にはst_nlink属性)。

編集:jwzを言い換えると:問題に直面したときに、「わかっている、の出力を解析する」と考える人もいますls -l。今、彼らは2つの問題を抱えています。

于 2012-12-14T23:32:24.847 に答える
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)
   ....:   
于 2012-12-14T23:31:50.090 に答える