簡體   English   中英

Python子進程Popen傳遞參數

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM