2010-07-06 2 views
1

Je le code suivant:Comment rediriger la sortie du programme Ruby à un certain fichier

puts "amit" 
puts "ravi" 

Il produit:

amit 
ravi 

Je voudrais rediriger Amit à un fichier et ravi vers un fichier différent.

Supposons que mon nom de fichier est name.rb. Quand je suis en train comme

system("name.rb > #{@filename}") 

deux Amit et sont redirigés ravi à @filename mais je veux la redirection vers un autre fichier ou d'abord il réorienterai deux fichiers de même nom mais dans un fichier de sortie est amit et dans un autre fichier de la même sortie est ravi.

+1

Vous pouvez écrire séparément dans STDERR et STDOUT, puis rediriger chacune de ces sorties vers un fichier différent sur le ligne de commande. Cependant, je ne pense pas qu'il existe un moyen d'utiliser la redirection de sortie sur la ligne de commande pour diriger la sortie STDOUT arbitraire vers des fichiers spécifiques. – Jeff

Répondre

1

Jetez un oeil à Ruby Input/Output et Ruby File Handling.

+0

monsieur est-il possible de rediriger différentes parties de la sortie à rediriger vers differnt fichier ou de même comme amit à certains fichiers et ravi à différents – Milan

+0

Je ne pense pas que l'on peut "séparer" la sortie d'un programme et le rediriger vers différents fichiers malheureusement. – phimuemue

+0

mais monsieur je le veux mal ... – Milan

3

Au lieu de vous rediriger pouvez passer les noms de fichiers comme arguments et écrire de rubis aux fichiers:

open(ARGV[0], 'w') do |f| 
    f.puts "amit" 
end 

open(ARGV[1], 'w') do |f| 
    f.puts "ravi" 
end 

Puis:

system("name.rb 1.txt 2.txt") 
+0

désolé leventix je ne t'ai pas fait crier tu l'expires plus – Milan

+0

et supposent et très grands moyens son de beaucoup de ligne alors quoi faire ?? – Milan

+0

Cette solution est applicable si vous pouvez modifier le fichier qui écrit le texte. Si tel est le cas, vous devez modifier ce programme pour afficher chaque ligne dans le fichier souhaité. Si vous expliquez ce que vous voulez réaliser, nous pouvons peut-être vous aider davantage. – Leventix

4

Vous pouvez modifier la destination de stdout $ et stderr $:

stout = File.open(ARGV[0], 'w') 
sterr = File.open(ARGV[1], 'w') 

$stdout.reopen(stout) 
$stderr.reopen(sterr) 

puts "something" 
$stderr.puts "something another" 
+0

sir cud u plzz l'expliquer plus je me bats vraiment ... comme si mon o/p comme setp viddec2 video_max_width 720 video_display Setp viddec2 sur setp viddec2 video_max_width 720 setp viddec2 video_display off comment rediriger deux parties de mon o/p seprated mes nouvelles lignes à deux fichiers differnt plzzz monsieur me aider ou quelqu'un d'autre le sait première partie o/p signifie setp viddec2 video_max_width 720 video_display Setp viddec2 sur généré par une boucle et la deuxième partie par une autre boucle et supposons que mon nom est le système et faire main.rb im ("filee.rb> # {@ filename}") – Milan

+0

je suis capable de rediriger tout o/p vers @filename mais je veux Première partie de o/p à rediriger vers un fichier et une autre partie o/p vers un autre système de fichiers ("main.rb> # {@ nomfichier}") que je fais – Milan

+0

et comment dans mon cas je peux changer la destination de $ stdout – Milan

Questions connexes