2017-07-10 5 views
0

Hey Ich habe die folgende Verzeichnisstruktur bekommt:Python läuft subprocess von Elternverzeichnis

ein übergeordnetes Verzeichnis mit a.sh und ein Kind Verzeichnis py mit b.py. Jetzt möchte ich a.sh von b.py anrufen. Wie mache ich das?

Meine Versuche sind:

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

UND

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

In beiden Fällen erhalte ich:

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

Versuchen Sie, den absoluten Pfad der Datei zu verwenden. dh von root –

+0

@AkshayApte Ich habe vergessen, dass dies keine Option ist, da der absolute Pfad ist variabel, je nachdem welchen Computer es verwendet wird. All diese Variablen zu ändern wäre zu mühsam ... – Alex

Antwort

2

Ich würde empfehlen, aus dem Python-Skript Pfad berechneten absoluten Pfad zu verwenden.

import os 

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

script_path wären absoluten Pfad zu Ihrem Skript und würde aus dem Python-Skript Pfad berechnet werden, also, wenn Ihr Bash-Skript immer an dem gleichen relativen Pfad von Ihrem Python-Skript ist, wird es immer funktioniert, was auch immer das Verzeichnis Sie laufen Programm von.


Btw, rate ich zu immer Verwendung os.path.join Pfade zu berechnen und nie Concat Strings mit + aber format verwenden. Ich lasse dich nach dem Grund fragen.