5

バックグラウンド

dir/s私は常にバッチファイルでコマンドを使用しています。しかし、私はpythonを使ってこれを呼び出すことができません。注: Python 2.7.3 を使用しています。

コード

import subprocess
subprocess.call(["dir/s"])

エラーメッセージ

Traceback (most recent call last):
  File "<pyshell#2>", line 1, in <module>
    subprocess.call(["dir/s"])
  File "C:\Python27\lib\subprocess.py", line 493, in call
    return Popen(*popenargs, **kwargs).wait()
  File "C:\Python27\lib\subprocess.py", line 679, in __init__
    errread, errwrite)
  File "C:\Python27\lib\subprocess.py", line 896, in _execute_child
    startupinfo)
WindowsError: [Error 2] The system cannot find the file specified

見積もりを変更しようとしましたが、何も機能しませんでした。

dir/sを使用してモジュールを呼び出すにはどうすればよいsubprocessですか?

4

5 に答える 5

7

どうですか

subprocess.call("dir/s", shell=True)

検証されていない。

于 2013-03-04T17:29:59.910 に答える
3

これはあなたが求めているものとは大きく異なりますが、同じ問題を解決します。さらに、pythonic のマルチプラットフォームの方法で解決します。

import fnmatch
import os

def recglob(directory, ext):
    l = []
    for root, dirnames, filenames in os.walk(directory):
        for filename in fnmatch.filter(filenames, ext):
            l.append(os.path.join(root, filename))
    return l
于 2013-03-04T17:28:48.640 に答える
1

私はついに答えを見つけました。ディレクトリ (例: ) 内のすべてのディレクトリを一覧表示するには、最初にモジュールをインポートする必要があります。D:\\C:\\os

import os

次に、すべてをリストしたいと言う必要があります。その中で、出力が印刷されることを確認する必要があります。

for top, dirs, files in os.walk('D:\\'):
    for nm in files:       
        print os.path.join(top, nm)

そんな感じで解決できました。これのおかげです

于 2013-03-04T21:30:52.380 に答える
1

dirと の間にはスペースが必要です/s。したがって、2 つの要素の配列に分割します。また、carlosdoc が指摘したように、dirコマンドはシェル ビルトインであるため、shell=True を追加する必要があります。

import subprocess
subprocess.call(["dir", "/s"], shell=True)

ただし、ディレクトリの一覧を取得しようとしている場合は、osモジュールで利用可能な関数を使用して、OS に依存しないようにしますos.listdir()os.chdir()

于 2013-03-04T17:24:39.120 に答える
-1

コマンドラインの組み込み部分であるため、次のように実行する必要があります。

import subprocess
subprocess.call("cmd /c dir /s")
于 2013-03-04T17:29:47.630 に答える