Мне нужно передать в качестве параметра скрипта Python имя последнего файла .csv, созданного в папке - PullRequest
0 голосов
/ 17 мая 2019

Мне нужно передать скрипту csv2sql имя последнего файла .csv, который я создал в рабочей папке.

Могу ли я использовать это:

ls -t *.csv | head -1

чтобы получить вывод как параметр?

python csv2sql.py -t products last_created_file.csv > sql.output

Если я попытаюсь:

python csv2sql.py -t products ls -t *.csv | head -1 > sql.output

Я получу это:

csv2sql.py: error: argument csvFile: can't open 'ls': [Errno 2] No such file or directory: 'ls'

Ответы [ 2 ]

0 голосов
/ 17 мая 2019

Это проблема оболочки. Общий синтаксис для интерпретации вывода командной строки как одного аргумента для другой командной строки - это обратная кавычка. Для того, что я думаю вы делаете, это будет выглядеть так:

python csv2sql.py -t products `ls -t *.csv | head -1` > sql.output

Это будет

  • Выполнить команду ls
  • Труба, которая к head
  • Вернуть одну строку в качестве аргумента python
  • Переведите стандартный вывод python в sql.output
0 голосов
/ 17 мая 2019

Вы получаете ошибку, потому что bash не видит ls -t *.csv | head -1 как команду, а как аргументы команды python (поэтому каждое слово становится аргументом, например: args [2] будет 'ls', args[3] будет '-t' и т. Д.).

Чтобы исправить это, вы можете сохранить вывод ls -t *.csv | head -1 в переменной, а затем передать переменную команде python, сохранив ее как bashфайл, а затем выполните его:

#!/bin/bash
output=$(ls -t *.csv | head -1)
python csv2sql.py -t products $output | head -1 > sql.output

Обратите внимание, что в настоящее время у меня нет доступа к моей машине с Linux и я не могу ничего тестировать, поэтому я предполагаю, что команда ls -t *.csv | head -1 делает то, чтоВы хотите это сделать.Приведенное выше решение также не очень аккуратное, поскольку оно использует и bash, и python, поэтому лично я бы рекомендовал исследовать модуль подсистемы и использовать его для всех решений на python.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...