#python #xargs
#python #xargs
Вопрос:
В каталоге с 30 CSV-файлами выполняется:
find . -name "*.csv" | (xargs python ~/script.py)
Как я могу заставить python правильно запускаться для каждого передаваемого файла xargs
? Я делаю print sys.stdin
, и это всего лишь один файл. Я пробую for file in stdin
цикл, но там ничего нет. Чего я не понимаю?
Комментарии:
1. Отвечая на мой собственный вопрос.
fileinput
Модуль — это то, где вы хотите быть: docs.python.org/library/fileinput.html2. используйте fileinput внутри вашего скрипта на Python, и вам вообще не придется использовать какие-либо команды оболочки.
Ответ №1:
На самом деле xargs не переходит в stdin. Он передает все свои данные, прочитанные из stdin, в качестве аргументов команде, которую вы указываете в параметре.
Вы можете отлаживать вызов вашей команды с помощью echo:
find . -name "*.csv" | (xargs echo python ./script.py)
Вы увидите, что все ваши файлы выводятся в одной строке.
Итак, на самом деле, чтобы получить доступ к вашим файлам из списка аргументов в python, используйте это в своем скрипте:
import sys
for argument in sys.argv[1:]:
print argument
Ответ №2:
script.py выполняется ровно один раз для каждого CSV-файла
python ~/script.py file1.csv
python ~/script.py file2.csv
python ~/script.py file3.csv
python ~/script.py file4.csv
и т. д
Если вы хотите запустить его как
python ~/script.py file1.csv file2.csv file3.csv
затем выполните
python ~/script.py `find . -name "*.csv"`
или
python ~/script.py `ls *.csv`
(«возможно, придется экранировать, не уверен)
РЕДАКТИРОВАТЬ: обратите внимание на разницу между ` и’