2013-01-24 3 views
0

J'utilise python pour os.fork un enfant progresse, et utilise os.execv pour exécuter un autre programme dans la progression de l'enfant. Comment puis-je rediriger les E/S dans le programme enfant. J'ai essayé mais j'ai échoué.Python rediriger stdin/stdout avec execv

import sys, os 

pid = os.fork() 
if pid is 0: 
    sys.stdin = open('./test.in') 
    os.execv('/usr/bin/python', ['python', './test.py']) 

Alors que test.py est:

import sys 

print(sys.stdin) 
a = input() 
print(a) 
+0

Regardez dans le [' subprocess'] (http://docs.python.org/2/library/subprocess.html) module. –

+1

@JoachimPileborg: 'subprocess' est bon mais pas ce que je veux, puisque je veux limiter la ressource dans le processus fils. –

+1

On dirait que c'est ce que vous voulez: http://stackoverflow.com/a/8500169/10601 – perimosocordiae

Répondre

3

Après os.fork() essayer ce rediriger stdin et stderr:

import os 

STDIN_FILENO = 0 
STDOUT_FILENO = 1 
STDERR_FILENO = 2 

# redirect stdout    
new_stdout = os.open(stdout_file, os.O_WRONLY|os.O_CREAT|os.O_TRUNC) 
os.dup2(new_stdout, STDOUT_FILENO) 

# redirect stderr 
new_stderr = os.open(stderr_file, os.O_WRONLY|os.O_CREAT|os.O_TRUNC) 
os.dup2(new_stderr, STDERR_FILENO) 

`` `

Questions connexes