2014-02-18 4 views
0

У меня есть скрипт python, который принимает файл как аргумент через sys.argv.Передайте файл как аргумент в Linux

Каков наилучший способ передачи этого файла в качестве аргумента в Linux?

Я попытался добавить эту строку кода в первую строку моего сценария python, считая, что это позволит мне перетаскивать на него файлы, но это, похоже, не работает.

#!/usr/bin/env python 

Есть что-то, что мне не хватает? Приветствия

+6

umm вы попробовали ввести 'python script.py filename' в терминал? –

+0

Вы создали скрипт eXecutable? –

+0

Существует ли этот двоичный путь? (поскольку он имеет пробел) –

ответ

4

Попробуйте использовать python script.py filename

Линия #!/usr/bin/env python является притон линии.

Если вы сделаете свой сценарий исполняемым (т. Е. Измените его права на файл с помощью chmod), shebang поможет определить тип скрипта.

Альтернативный притона будет использовать путь для python бинарных непосредственно как #!/usr/bin/python, но путь может отличаться на разных машинах, и, следовательно, мы обычно получаем путь к bindary от env.

Шэбан обычно не требуется, если вы нормально запускаете скрипт каждый раз с python script.py, но если сценарий упоминается в другом месте, это может вызвать проблемы. Я добавляю shebang ко всем моим скриптам, чтобы быть уверенным, какой скрипт он находится в моем редакторе.

Обратите внимание, что расширение .py является полностью необязательным, и для общей цели вы можете запустить ./script в больших проектах для достижения поставленной задачи; эта модульность гарантирует, что исполняемый скрипт может находиться в python, bash или любом другом языке сценариев, если он делает то, что он должен делать.

Нет, вы не можете перетащить файл и передать его в качестве параметра для скрипта python, даже если он является исполняемым.

+0

Спасибо ... так что если я создаю скрипт исполняемый файл, я должен иметь возможность перетаскивать файлы на него? или нет? – iGwok

+0

Нет, вы не сможете. –

5

Это довольно простой пример, который принимает первый аргумент (sys.argv [1]), который мы будем считать именем файла, открывает его и печатает все строки.

import sys 

f = open(sys.argv[1]) 
lines = f.readlines() 

for line in lines: 
    print line 

f.close() 

Вы могли бы назвать этот файл, введя Python

<source_file.py> <filename> 

Если мой исходный файл был назван readMyFile.py, и я хотел прочитать Myfile.txt, я напечатал бы

python readMyFile.py myFile.txt 

python system

Что касается выполнения перетаскивания, вы всегда можете поставить Python вызовите скрипт bash, а затем передайте аргумент из сценария bash в скрипт python. Взгляните на this stack overflow thread. По сути, вы просто создали бы скрипт bash с этим кодом.

#!/bin/bash 
python <source_file.py> "$1" 

или в моем конкретном примере ...

#!/bin/bash 
python readMyFile.py "$1" 

Похоже, что вам, возможно, придется сопровождать некоторые из приведенных выше синтаксисов с помощью некоторого кода в файле .desktop. Проверьте это askubuntu link

+0

+1 для передачи аргумента из bash .. –

Смежные вопросы