0

そのため、サーバー上のすべてのファイルを調べて、それらの各ファイル名の後にコマンド「ll」を実行し、そのコマンドの出力を取得して txt ファイルに出力する必要があるスクリプトを作成しています。

例:

フォルダ/ファイル名.txt ll

output: SoMETHINGSomethingSomethingother - これは output.txt ファイルに送信されます

フォルダー/サブフォルダー/filename3.txt ll

output: SoMETHINGSomethingSomethingother - これは output.txt ファイルに送信されます

これは私がこれまでに持っているものです:

import os

with open("output.txt", "w") as a:
    for path, subdirs, files in os.walk(r'C:\Users\user\Desktop\Test_Py'):
       for filename in files:
         f = os.path.join(filename)
         m = f + ' ll'

         a.write(str(m) + os.linesep) 

だから私が今理解しようとしているのは、出力されるファイル名を「ll」コマンドで実行する方法です。これまでのところ、このコードは、そのフォルダーとそのサブフォルダー内のすべてのファイルの名前を output.txt ファイルに書き込みます。

誰にもアイデアはありますか?

4

2 に答える 2

1

使用os.system()

import os

with open("output.txt", "w") as a:
    for path, subdirs, files in os.walk(r'C:\Users\user\Desktop\Test_Py'):
        for filename in files:
            f = os.path.join(filename)
            m = f + ' ll > output.txt'

            os.system(m)

これにより、標準出力のみがoutput.txtファイルに送信されます。にもエラーメッセージを送信したい場合は、代わりoutput.txtにを使用してください。m = f + ' ll > output.txt 2>&1'

説明:端末にコマンドを入力したかのように、システムでos.system(command_string)コマンドを実行します。演算子は、コマンドからの標準出力をファイルにリダイレクトするためのWindowsおよびLinuxの標準ですcommand_string>最後の2>&1余分な引数は、あまり明確ではない唯一の部分です。これは、標準エラーを標準出力が行われているのと同じ場所にリダイレクトします。この最後の部分の詳細については、こちらをご覧ください

于 2012-08-31T08:37:42.663 に答える
0

「ll」コマンドでファイルを実行するには、Python で利用可能なsubprocessモジュールを使用できます。

あなたの修正されたコードは次のようになります:-

import os
import subprocess
import shlex

with open("output.txt", "w") as a:
    for path, subdirs, files in os.walk(r'C:\Users\user\Desktop\Test_Py'):
       for filename in files:
         f = os.path.join(filename)
         m = f + ' ll'

         cmd_args = shlex.split(m)
         output = subprocess.check_output(cmd_args)
         a.write(output + os.linesep) 
于 2012-08-31T08:35:43.417 に答える