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

    CGI per ricevere dati e non per restituirli al client

    buongiorno a tutti,
    sono nuovo di questo forum e normalmente cerco le soluzioni con il web, ma in questo caso proprio non ci riesco, quindi spero che qualcuno mi sappia aiutare.
    Normalmente CGI serve a ricevere dati dal client, elaborarli in qualche modo e fornire il risultato al client stesso. Infatti non a caso lo Standard Output è indirizzato al client.
    Nel mio caso invece tramite CGI ricevo sì dei dati, ma non devo rispondere, devo solo eseguire delle azioni. Per semplicità ho configurato Tomcat per eseguire dei .BAT, perché a seconda dei casi mi verrebbe comodo lanciare in modo asincrono ulteriori .BAT (comando START).
    Ho quindi provato con la shell di DOS e le cose funzionano egregiamente, ma se la stessa .BAT viene attivata da CGI il task rimane pending e non lancia affatto la mia .BAT secondaria.
    Credo che dipenda dalla assegnazione dello standard output al client, ma non ne sono così certo. Qualcuno saprebbe aiutarmi?

  2. #2
    Utente di HTML.it
    Registrato dal
    Sep 2001
    Messaggi
    21,188
    Immagino che stai usando Perl [CGI (Common Gateway Interface) puo` essere fatto con programmi in vari linguaggi].

    In Perl puoi indirizzare l'output in vari dispositivi: si tratta di usare l'open in modo opportuno.
    In pratica devi aprire un canale (open) che vada a scrivere sul dispositivo che ti interessa.

    Inoltre se attivi tramite CGI, il sistema si aspetta che tu fornisca una pagina di risposta, ed il browser resta pending finche` non arriva una pagina HTML completa. Pertanto devi comunque fornire una pagina comunque ridotta (la pagina deve iniziare con il DOCTYPE e finire con </html>)
    Nuova politica di maggiore severita` sui titoli delle discussioni: (ri)leggete il regolamento
    No domande tecniche in messaggi privati

  3. #3
    a dire il vero sto usando la shell di DOS, perché voglio lanciare un programma che manda un messaggio ad un utente. In futuro potrei lanciare altri programmi, a seconda dei casi. Ti allego l'esempio su cui sto provando.
    Come puoi notare utilizzo START per creare un task separato e non bloccare la script.
    Se tolgo l'ultima riga funziona tutto, altrimenti dà errore (se la script la lancio da prompt ovviamente funziona tutto a dovere).
    Come si fa (se esiste il modo) a reindirizzare nella shell di DOS lo STDOUT (credo sia questa la ragione) ovvero è il content-type il problema?
    Che dici, mi conviene invece impararmi quattro cose in PERL?

    ecco la script:


    :: filename: %CATALINA_HOME%\foo\WEB-INF\cgi\foo5.bat
    :: purpose: Output HTML via CGI
    :: input: stdin
    :: output: Via HTML current time and directory on system
    :: comments: No echo off needed if executable includes switch /q
    :: Remember to escape special characters with a carot(^)
    echo Content-type: text/html
    echo.
    echo.
    echo ^<HTML^>
    echo ^<BODY^>
    echo ^<H1^>Foo5^</H1^>
    echo ^<H2^>%QUERY_STRING%^</H2^>
    echo ^<P^>Time is:
    time /t
    echo ^</P^>
    echo ^<P^>location is:
    chdir
    echo ^</P^>
    echo ^</BODY^>
    echo ^</HTML^>
    start notepad

    grazie

  4. #4
    Utente di HTML.it
    Registrato dal
    Sep 2001
    Messaggi
    21,188
    Anzitutto noto che hai inserito il codice senza usare i tag CODE del forum, per cui non so se e` arrivato correttamente.

    Non conosco la sintassi che hai usato.
    Quando usavo la shell, e` stato la CSH o la KSH (di unix/linux), per cui non posso darti informazioni precise.

    Comunque con quel codice tu gia` invii dei dati al client (tutti i vari echo generano una pagina HTML (di tipo arcaico, ma se la pagina appare vuol dire che il tuo browser la interpreta ancora)

    Non so assolutamente cosa fa il comando start. Devi vedere cosa vuole in input (non c'e` nel tuo codice l'oggetto del notepad - il file da editare) e cosa da` in output e su quale canale output.
    In linux/unix c'e` il modo di reindirizzare gli output (> o >> o simili). In MS-DOS (e` questa la tua shell?) potrebbe anche esistere (avrebbe senso che esistesse): prova a vedere se trovi qualcosa nei manuali.
    Nuova politica di maggiore severita` sui titoli delle discussioni: (ri)leggete il regolamento
    No domande tecniche in messaggi privati

  5. #5
    il comando START lancia un task in modo asincrono, cioè lo lancia e non ne aspetta la conclusione, ma prosegue con il main task. In questo modo non si rischia di far rimanere pending il task CGI.
    Anche in DOS esiste l'opzione > per ridirigere lo STDOUT a un dispositivo o file, ma in questo caso (anche se la START fa partire un nuovo task) lo STDOUT non si riesce a ridirigerlo al default di sistema.
    Stavo pensando: se questa semplice funzione potesse essere svolta in PERL come ne sarebbe un esempio? (se funziona con NOTEPAD sono quasi certo che funzionerebbe anche con qualsiasi altro programma).
    grazie
    Roberto

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.