2015-07-31 2 views
0

Я хочу, чтобы иметь возможность распечатать список всех файлов в директории в Linux, но мой код печать только первый пункт в каталогеРасширения Звездочки в Glob

внутри домашней директории text1.txt, text2. .txt, text3.txt

sys.argv[1] должно быть/home/*, когда я запускаю его в командной строке:

python fileName.py /home/* 

Сценарий:

def list_file(): 
    listFile= glob.glob(sys.argv[1]) 
    return listFile 

print list_file() 

выход только первый файл в каталоге

['text1.txt'] 

любая идея? Код прекрасно работает на Windows, но когда я переехал его на Linux, он больше не работает

Благодаря

ответ

2

Поскольку оболочка расширяет подстановочные знаки, вам не нужно звонить glob. Просто распечатайте все аргументы в sys.argv

def list_file(): 
    return sys.argv[1:] 

print list_file() 
+0

спасибо большое! это проще, чем я думал – RLe

4

, как вы вызываете сценарий, то * получает расширяется самой Bash, так говоря

python fileName.py /home/* 

это получает разложена в

python fileName.py /home/file1 /home/file2 /home/file3 

так sys.argv[1] просто /home/file1.

Чтобы заставить его работать, добавьте * в сценарии Python:

import sys 
import glob 

def list_file(): 
    return glob.glob(sys.argv[1] + '*') 

print list_file() 

и бежать как python fileName.py /home/.

1

Использовать цитаты. Команда Shell запускает первый параметр как команду. Вы можете увидеть это с помощью «печати sys.argv [1]»

python fileName.py "/home/*"