Разобранный аргумент fswatch не возвращает ожидаемое значение? - PullRequest
0 голосов
/ 19 июня 2020

Я мог бы неправильно понять xargs -I {} проанализированный аргумент fswatch. Это должно вернуть путь к файлу любых новых событий в моем указанном каталоге, правильно?

Моя команда ниже предназначена для отслеживания /my/path/to/watch и запуска my_script.py, когда новое событие происходит в /my/path/to/watch. my_script.py требует путь к файлу, связанный с новым событием, что, как я думал, я проходил с {}.

Моя команда:

fswatch -0  /my/path/to/watch | xargs -0 -n 1 -I {} python my_script.py {} > fswatch.output &

В my_script.py, I иметь

import sys
print sys.argv[0]

Но это просто возвращает my_script.py, где я ожидаю, что он вернет путь к файлу, связанный с новым событием в /my/path/to/watch.

Что мне здесь не хватает?

1 Ответ

0 голосов
/ 19 июня 2020

Когда вы выполняете программу с вашего терминала, первым аргументом всегда будет имя вашей программы, то есть sys.argv [0] будет именем вашего скрипта. Вероятно, вы захотите использовать sys.argv [1], поскольку все, что находится после sys.argv [0], будет фактическими параметрами, передаваемыми в сценарий.

Вы можете посмотреть на это так:

$ python my_script.py foo var

sys.args будет выглядеть так:

|     0        |  1  |  2  | 
| my_script.py | foo | var |

По сути, sys.args [0] будет именем вашего скрипта, а sys.argv [1] и т.д. быть фактическими параметрами, переданными ему.

...