Ho un eseguibile che accetta la stringa e restituisce un'altra stringa. Ora ho bisogno di alimentare un file come input e scrivere l'output in un altro file. Il comando standard è simile al seguente executable_path <input> output
. Ora lo avvolgo in python. Ma ottengo errori.Chiamata di sottoprocesso Python con segno maggiore (>) non funzionante
cmd = [executable_path , '<', 'tmp/input.txt', '>',
'tmp/output.txt']
p = subprocess.Popen(cmd)
p.communicate()
invalid argument: <
Ho provato anche unendo gli argomenti cmd:
cmd = [executable_path, ' '.join(['<', 'tmp/input.txt', '>',
'tmp/output.txt'])]
invalid argument: < tmp/input.txt > tmp/output.txt
Passando il comando come stringa non ha funzionato neanche.
p = subprocess.Popen(' '.join(cmd))
OSError: [Errno 2] No such file or directory
Che cosa mi manca qui?
Sembra più pulito di quello che avevo in origine. Sono passato a questa soluzione. Grazie. – CentAu
È possibile utilizzare qualsiasi tipo di descrittore di file, ad es. pipe, e anche TCP [socket] (https://docs.python.org/2/library/socket.html#socket.socket.fileno). – kay
@ user292139: non correlato: 1. non utilizzare '.communicate()' a meno che non si usi 'PIPE'. Potresti usare 'subprocess.check_call ([executable_path], stdin = in_stream, stdout = out_stream)'. 2. Non è possibile utilizzare i socket TCP qui, per reindirizzare l'output dei sottoprocessi su Windows. – jfs