[英]Python subprocess Popen passing arguments
我試圖用參數從我的python調用shell腳本,但未傳遞參數
我的Shellscript:
echo "Inside shell"
echo $0
echo $1
cd $1
pwd
for file in *.csv
do
split -l 50000 -d -a 4 "$file" "$file"
done
echo "Outside shell"
與殼=真
this_dir = os.path.dirname(os.path.abspath(__file__))
cmd = [os.path.join(this_dir,'split.sh'),fileslocation]
print 'cmd = ', cmd
process = subprocess.Popen(cmd,shell=True)
參數傳遞不正確...
刪除Shell = True
cmd = ['/opt/sw/p3/src/PricesPaidAPI/split.sh', '../cookedData']
Traceback (most recent call last):
File "csv_rename.py", line 23, in <module>
process = subprocess.Popen(cmd)
File "/usr/lib/python2.7/subprocess.py", line 679, in __init__
errread, errwrite)
File "/usr/lib/python2.7/subprocess.py", line 1249, in _execute_child
raise child_exception
OSError: [Errno 8] Exec format error
好的,我不知道這是否應該是騙子(根據評論)。 但這確實是shebang有幫助的。 這是確認。
popen_test.py:
import subprocess
subprocess.Popen(["./dummy.sh", "test"])
noshebang.sh:
echo "Echoing: $1"
結果是OSError: [Errno 8] Exec format error
。 這是因為OS希望文件是可執行文件(duh)。 但是,一個#!
-第一行中的shebang是系統的特殊標記,該文件應在其指定的shell環境中執行。 因此,即使不是,也可以將其視為可執行文件。 所以:
shebang.sh:
#!/bin/sh
echo "Echoing: $1"
作品。
它本質上與python的shell=True
。 只是系統負責。 IMO很難用這種方法注入隨機代碼。 所以我建議去做。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.