2017-07-10 14 views
0

ねえ、私は次のディレクトリ構造を持っている:Pythonの実行サブプロセス

a.shと親ディレクトリとb.pyと子ディレクトリpya.shb.pyに電話します。それ、どうやったら出来るの?

私の試みは、次のとおりです。私が得るいずれの場合も

subprocess.run(['./a.sh'], cwd="..", stdout=subprocess.PIPE) 

import os 
initPath = os.path.pardir 
subprocess.run([initPath+'./a.sh'], stdout=subprocess.PIPE) 

を:

FileNotFoundError: [Errno 2] No such file or directory: './a.sh' 
+0

ファイルの絶対パスを使用してください。つまりルートから –

+0

@AkshayApte絶対パスは使用するコンピュータによって変わるため、これはオプションではないことを忘れていました。そのような変数をすべて変更することは、あまりにも面倒です... – Alex

答えて

2

私はあなたのPythonスクリプトのパスから計算された絶対パスを使用することをお勧めします。

import os 

source = os.path.dirname(__file__) 
parent = os.path.join(source, '../') 
script_path = os.path.join(parent, 'a.sh') 

script_path、スクリプトへの絶対パスになりますし、あなたのPythonスクリプトのパスから計算されるので、あなたのbashスクリプトは、あなたのPythonスクリプトから同じ相対パスに常にある場合、それは常に働くだろう、どんなディレクトリあなたはプログラムを実行しています。


ところで、私は+でパスと決して連結文字列を計算するが、formatを使用する常に使用os.path.joinに助言します。私はなぜあなたがチェックさせる。

関連する問題