Visualizzazione dei risultati da 1 a 8 su 8
  1. #1

    ruby ARGV, manca il primo argomento :O

    Ciao a tutti!

    sto sviluppando un app da linea di comando con ruby.
    Tutto bene naturalmente, tranne per una cosa che non mi torna...

    Codice PHP:
    giulio@giulio:~/Desktop/fontextract/bin$ ./fontextract bla1 bla2 bla3
    fontextract
    :40
    @arguments arguments
    (rdb:1irb
    irb
    (#<App:0xb7905d14>):001:0> arguments
    => ["bla2""bla3"]
    irb(#<App:0xb7905d14>):002:0> $0
    => "bla1"
    irb(#<App:0xb7905d14>):003:0> 
    Ma come!?
    Su $0 non dovrebbe esservi il nome dello script e su arguments il primo argomento!?

    SRC
    Codice PHP:
    require 'optparse'
    require 'rdoc/usage'
    require 'ostruct'
    require 'date'
    require 'rubygems'
    require 'ruby-debug'

    class App
      VERSION 
    '0.0.1'

      
    attr_reader :options

      def initialize
    (argumentsstdin)
        
    debugger
        
    @arguments arguments
        
    @stdin stdin
        
    @options OpenStruct.new
        ...
      
    end

      
    ...
    end 
    Grazie a tutti!
    Lungo le due rive del fiume gelato si stendeva la cupa e tetra foresta di abeti, dai quali il vento aveva appena spazzato il manto di brina. Nella luce crepuscolare quegli abeti neri e sinistri sembravano inclinarsi l'uno verso l'altro. Un silenzio minaccioso incombeva sul paesaggio, privo di qualsiasi segno di vita o di movimento, e desolato e freddo al punto da non poter ispirare che un solo sentimento: quello della più triste malinconia. E nello stesso tempo pareva che da quel paesaggio trapelasse una specie di riso, un riso ben più spaventoso di qualsiasi malinconia o tristezza, un riso tragico, come quello di una sfinge, un riso agghiacciante più della brina e che rammendava l'incombere minaccioso dell'ineluttabile. Era la saggezza potente e impenetrabile dell'eternità che irrideva alla vita, alla sua futilità e agli sforzi degli uomini.

  2. #2
    Su irb $0 restituisce irb poiché è quello il nome del file che esegue.
    arguments non esiste. Nello script che hai postato manca la parte che istanzia la classe e passa ad arguments l'array di parametri.

    L'array di parametri è salvato nella costante ARGV.

    Se usi optparse, comunque, molte attività di parsing le esegue lui e quindi dovrai far riferimento direttamente all'oggetto parser creato.

    codice:
    #!/usr/bin/env ruby -wKU
    p ARGV
    codice:
    $ ruby test.rb 
    []
    $ ruby test.rb foo bar
    ["foo", "bar"]
    $ ruby test.rb foo bar --n baz
    ["foo", "bar", "--n", "baz"]

  3. #3
    Originariamente inviato da weppos
    Su irb $0 restituisce irb poiché è quello il nome del file che esegue.
    arguments non esiste. Nello script che hai postato manca la parte che istanzia la classe e passa ad arguments l'array di parametri.
    in effetti
    sorry, l'ho scordato perchè è in fondo al file ed arguments = ARGV

    Codice PHP:
    app App.new(ARGVSTDIN)
    app.run 

    Se usi optparse, comunque, molte attività di parsing le esegue lui e quindi dovrai far riferimento direttamente all'oggetto parser creato.

    codice:
    #!/usr/bin/env ruby -wKU
    p ARGV
    codice:
    $ ruby test.rb 
    []
    $ ruby test.rb foo bar
    ["foo", "bar"]
    $ ruby test.rb foo bar --n baz
    ["foo", "bar", "--n", "baz"]
    Il test funzia, però sul mio script continua a non funzionare anche se non carico nulla oltre a rubygems e ruby-debug (quindi escludo OptionParser ecc.).

    Codice PHP:
    #require 'optparse'
    #require 'rdoc/usage'
    #require 'ostruct'
    #require 'date'
    require 'rubygems'
    require 'ruby-debug'

    class App
      VERSION 
    '0.0.1'

      
    attr_reader :options

      def initialize
    (argumentsstdin)
      
    debugger
        
    @arguments arguments
        
    @stdin stdin
        
    @options OpenStruct.new
      
    end

      
    ...
    end

    app 
    App.new(ARGVSTDIN)
    app.run 
    Forse dipende dal debug con irb, adesso controllo con un each and puts.

    thx
    Lungo le due rive del fiume gelato si stendeva la cupa e tetra foresta di abeti, dai quali il vento aveva appena spazzato il manto di brina. Nella luce crepuscolare quegli abeti neri e sinistri sembravano inclinarsi l'uno verso l'altro. Un silenzio minaccioso incombeva sul paesaggio, privo di qualsiasi segno di vita o di movimento, e desolato e freddo al punto da non poter ispirare che un solo sentimento: quello della più triste malinconia. E nello stesso tempo pareva che da quel paesaggio trapelasse una specie di riso, un riso ben più spaventoso di qualsiasi malinconia o tristezza, un riso tragico, come quello di una sfinge, un riso agghiacciante più della brina e che rammendava l'incombere minaccioso dell'ineluttabile. Era la saggezza potente e impenetrabile dell'eternità che irrideva alla vita, alla sua futilità e agli sforzi degli uomini.

  4. #4
    Uh, mi sfugge qualcosa!

    codice
    Codice PHP:
    #require 'optparse'
    #require 'rdoc/usage'
    #require 'ostruct'
    #require 'date'
    require 'rubygems'
    require 'ruby-debug'

    class App
      VERSION 
    '0.0.1'

      
    attr_reader :options

      def initialize
    (argumentsstdin)
        
    puts "ARGV EACH"
        
    ARGV.each {|mmmputs mmm}
        
    puts "arguments EACH"
        
    arguments.each {|mmmputs mmm}
        
    debugger
        
    @arguments arguments
        
    @stdin stdin
        
    @options OpenStruct.new
        ...
      
    end
    end

    app 
    App.new(ARGVSTDIN)
    app.run 
    results
    Codice PHP:
    giulio@giulio:~/Desktop/fontextract/bin$ ./fontextract bla1 bla2 bla3
    ARGV EACH
    bla1
    bla2
    bla3
    arguments EACH
    bla1
    bla2
    bla3
    fontextract
    :44
    @arguments arguments
    (rdb:1irb
    irb
    (#<App:0xb792653c>):001:0> arguments
    => ["bla2""bla3"]
    irb(#<App:0xb792653c>):002:0> 
    why!? cosa mi sfugge? :master:
    Lungo le due rive del fiume gelato si stendeva la cupa e tetra foresta di abeti, dai quali il vento aveva appena spazzato il manto di brina. Nella luce crepuscolare quegli abeti neri e sinistri sembravano inclinarsi l'uno verso l'altro. Un silenzio minaccioso incombeva sul paesaggio, privo di qualsiasi segno di vita o di movimento, e desolato e freddo al punto da non poter ispirare che un solo sentimento: quello della più triste malinconia. E nello stesso tempo pareva che da quel paesaggio trapelasse una specie di riso, un riso ben più spaventoso di qualsiasi malinconia o tristezza, un riso tragico, come quello di una sfinge, un riso agghiacciante più della brina e che rammendava l'incombere minaccioso dell'ineluttabile. Era la saggezza potente e impenetrabile dell'eternità che irrideva alla vita, alla sua futilità e agli sforzi degli uomini.

  5. #5
    Ti sfugge che irb non serve per quello che la stai usando tu.
    irb è pensato per eseguire statement, non per il testing di uno script. A quello scopo esistono l'interprete e soprattutto gli unit test.

    codice:
    require 'rubygems'
    require 'ostruct'
    
    class App
      VERSION = '0.0.1'
    
      attr_reader :options
      attr_reader :arguments
    
      def initialize(arguments, stdin)
        @arguments = arguments
        @stdin = stdin
        @options = OpenStruct.new
      end
      
      def run
      end
      
    end
    
    app = App.new(ARGV, STDIN)
    app.run
    
    if __FILE__ == $0
      require 'test/unit'
      
      class AppTest < Test::Unit::TestCase
        def setup
          @app = App.new(ARGV, STDIN)
        end
        
        def test_initialize_should_set_arguments_from_command_line
          assert_equal ARGV.sort, @app.arguments.sort
        end
      end
    end
    codice:
    $ ruby app.rb 
    Loaded suite app
    Started
    .
    Finished in 0.00023 seconds.
    
    1 tests, 1 assertions, 0 failures, 0 errors

  6. #6
    Sicuramente il tuo è un approccio migliore, corretto e tra le altre cose potevo benissimo usare pp per vedere il valore di ARGV, cosa che funziona senza problemi.
    Però io sicuramente sbagliando uso molto spesso irb per comodità, anche e soprattutto con rails quando devo testare in velocità.
    Oggi mi sono abbattuto su questa cosa che è strana, solitamente non ho mai riscontrato problemi di questo tipo.
    Comunque ho fatto un altro test e praticamente ho capito che quando chiamo irb viene modificato ARGV.
    Ho fatto con test assegnando ARGV.clone ad arguments ed è filato tutto liscio.
    Irb comunque è incluso nel set di comandi di ruby-debug, adesso non so fino a che punto questo sia un comportamento imprevisto, ma appena ho tempo apro un ticket anche perchè mi sono accorto che poi ARGV rimane variato anche all'uscita da irb.

    code
    Codice PHP:
    require 'rubygems'
    require 'ruby-debug'

    cloned ARGV.clone
    debugger
    ARGV
    .each {|pputs p
    ex
    Codice PHP:
    giulio@portoxd2:~$ ruby test.rb bla1 bla2 bla3
    test
    .rb:6
    ARGV
    .each {|pputs p}
    (
    rdb:1pp ARGV
    ["bla1""bla2""bla3"]
    (
    rdb:1pp cloned
    ["bla1""bla2""bla3"]
    (
    rdb:1irb
    irb
    (main):001:0ARGV
    => ["bla2""bla3"]
    irb(main):002:0cloned
    => ["bla1""bla2""bla3"]
    irb(main):003:0> exit
    test.rb:6
    ARGV
    .each {|pputs p}
    (
    rdb:1) continue
    bla2
    bla3 
    Spero che torni utile
    Lungo le due rive del fiume gelato si stendeva la cupa e tetra foresta di abeti, dai quali il vento aveva appena spazzato il manto di brina. Nella luce crepuscolare quegli abeti neri e sinistri sembravano inclinarsi l'uno verso l'altro. Un silenzio minaccioso incombeva sul paesaggio, privo di qualsiasi segno di vita o di movimento, e desolato e freddo al punto da non poter ispirare che un solo sentimento: quello della più triste malinconia. E nello stesso tempo pareva che da quel paesaggio trapelasse una specie di riso, un riso ben più spaventoso di qualsiasi malinconia o tristezza, un riso tragico, come quello di una sfinge, un riso agghiacciante più della brina e che rammendava l'incombere minaccioso dell'ineluttabile. Era la saggezza potente e impenetrabile dell'eternità che irrideva alla vita, alla sua futilità e agli sforzi degli uomini.

  7. #7
    Se a qualcuno interessa... il ticket
    Lungo le due rive del fiume gelato si stendeva la cupa e tetra foresta di abeti, dai quali il vento aveva appena spazzato il manto di brina. Nella luce crepuscolare quegli abeti neri e sinistri sembravano inclinarsi l'uno verso l'altro. Un silenzio minaccioso incombeva sul paesaggio, privo di qualsiasi segno di vita o di movimento, e desolato e freddo al punto da non poter ispirare che un solo sentimento: quello della più triste malinconia. E nello stesso tempo pareva che da quel paesaggio trapelasse una specie di riso, un riso ben più spaventoso di qualsiasi malinconia o tristezza, un riso tragico, come quello di una sfinge, un riso agghiacciante più della brina e che rammendava l'incombere minaccioso dell'ineluttabile. Era la saggezza potente e impenetrabile dell'eternità che irrideva alla vita, alla sua futilità e agli sforzi degli uomini.

  8. #8
    Baco risolto solo in trunk per ora, dalla 0.10.4 in poi nelle release
    Lungo le due rive del fiume gelato si stendeva la cupa e tetra foresta di abeti, dai quali il vento aveva appena spazzato il manto di brina. Nella luce crepuscolare quegli abeti neri e sinistri sembravano inclinarsi l'uno verso l'altro. Un silenzio minaccioso incombeva sul paesaggio, privo di qualsiasi segno di vita o di movimento, e desolato e freddo al punto da non poter ispirare che un solo sentimento: quello della più triste malinconia. E nello stesso tempo pareva che da quel paesaggio trapelasse una specie di riso, un riso ben più spaventoso di qualsiasi malinconia o tristezza, un riso tragico, come quello di una sfinge, un riso agghiacciante più della brina e che rammendava l'incombere minaccioso dell'ineluttabile. Era la saggezza potente e impenetrabile dell'eternità che irrideva alla vita, alla sua futilità e agli sforzi degli uomini.

Permessi di invio

  • Non puoi inserire discussioni
  • Non puoi inserire repliche
  • Non puoi inserire allegati
  • Non puoi modificare i tuoi messaggi
  •  
Powered by vBulletin® Version 4.2.1
Copyright © 2024 vBulletin Solutions, Inc. All rights reserved.