2015-02-18 2 views
1

Я бы назвал сценарий оболочки из моего сценария python. Мне нужно передать 3 параметра/аргумента в сценарий оболочки. Я могу назвать скрипт (который находится в том же каталоге, что и сценарий Python), но возникли некоторые проблемы с параметром проходящейПередача параметров сценарию оболочки из программы python

from subprocess import call 

// other code here. 
line = "Hello" 
// Here is how I call the shell command 
call (["./myscript.sh", "/usr/share/file1.txt", ""/usr/share/file2.txt", line], shell=True) 

In my shell script I have this 
#!/bin/sh 

echo "Parameters are $1 $2 $3" 
... 

Unfortunately parameters are not getting passed correctly. 

I get this message: 

Parameters are 

None of the parameter values are passed in the script 
+1

Работает нормально с 'shell = False', рекомендуемое использование - почему вы думаете, что вам нужно' shell = True' вместо этого ?! –

+0

В любом случае вам не нужен аргумент списка с 'shell = True'. –

ответ

2
call ("./myscript.sh /usr/share/file1.txt /usr/share/file2.txt "+line, shell=True) 

При использовании shell=True вы можете непосредственно перейти команда как бы передающая оболочку напрямую.

+0

Да, я пробовал делать это, и он отлично работает, за исключением последнего аргумента. Я вижу это в своем скрипте: Параметры: /usr/share/file1.txt строка /usr/share/file2.txt Я бы хотел: /usr/share/file1.txt/usr/share/file2 .txt Здравствуйте, – user3803714

+0

@ user3803714 сейчас. Отредактировано – vks

+0

@EtanReisner did not see that.edited – vks

0

падение shell=True (возможно, потребуется сделать myscript.sh исполняемым: $ chmod +x myscript.sh):

#!/usr/bin/env python 
from subprocess import check_call 

line = "Hello world!" 
check_call(["./myscript.sh", "/usr/share/file1.txt", "/usr/share/file2.txt", 
      line]) 

Do not use a list argument and shell=True together.

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