2016-11-27 7 views
0

コマンドライン自体に追加の引数を指定することなくシェルスクリプトを実行します。代わりに、引数をハードコードしたいと思います。入力ファイル名とファイルパスをシェルスクリプトに入力します。コマンドラインで引数を指定しなくても、シェルスクリプトからPythonスクリプトに引数を渡します。

玩具シェルスクリプトは:私は$ ./script.shを実行したときに

#!/bin/bash 

time python3 path/to/pyscript/graph.py \ 
    --input-file-path=path/to/file/myfile.tsv 

ので、スクリプトはPYスクリプトに入力ファイル情報を渡す必要があります。

これはできますか?私はいつも "そのようなディレクトリやファイルはありません"というエラーを受け取ります...

注:私は、Pythonスクリプト側の引数を​​を使って扱います。

EDIT

それは、私はそれが原因である可能性がありますことを考えていなかったので、問題は、私は上記の私のおもちゃのスクリプトから省略していた何かによって引き起こされたことが判明しました。実際には、私はコメントアウトされた行を持っていたし、この行はスクリプトの実行を妨げていた。

玩具シェルスクリプトのフルバージョン:

#!/bin/bash 

time python3 path/to/pyscript/graph.py \ 
# this commented out line prevents the script from running 
    --input-file-path=path/to/file/myfile.tsv 
+0

は、あなたが同じエラーが出るのですか? –

答えて

2

に私はあなたのスクリプトが正しいですが、ファイルのパスが間違っていると思います。多分あなたは先導スラッシュを忘れていたでしょう。とにかく、path/to/pyscript/graph.pypath/to/file/myfile.tsvが正しいことを確認してください。

BASHスクリプトからハードコーディングされた引数でPythonスクリプトを呼び出す方法のダミー例:あなたは、コマンドラインからPythonスクリプトを実行すると

$ cat dummy_script.py 
import argparse 
import os 
import time 

parser = argparse.ArgumentParser() 
parser.add_argument("-i", "--input-file-path") 
args = parser.parse_args() 

if os.path.isfile(args.input_file_path): 
    print args.input_file_path, "is a file" 
    print "sleeping a second" 
    time.sleep(1) 

$ cat time_python_script.sh 
time python dummy_script.py --input-file-path=/etc/passwd 

$ /bin/bash time_python_script.sh 
/etc/passwd is a file 
sleeping a second 

real 0m1.047s 
user 0m0.028s 
sys 0m0.016s 
関連する問題