L'esecuzione di un programma esterno tramite system () non funziona correttamente

StackOverflow https://stackoverflow.com/questions/1612451

  •  06-07-2019
  •  | 
  •  

Domanda

Provo a chiamare un programma (ncbi blast, per coloro che hanno bisogno di sapere) dal mio codice, chiamando il comando in una chiamata di sistema ().

Se eseguo la stringa direttamente nella shell, funziona come previsto, ma se provo la stessa stringa tramite system (), il programma ritorna molto più velocemente, senza i risultati previsti. Il file di output viene creato, ma la dimensione del file è 0. Anche il codice di errore restituito è 0. Ho anche provato ad aggiungere " > output.log 2 > error.log " ma questi file non vengono creati.

Suppongo che abbia qualcosa a che fare con le variabili di ambiente o il percorso ...

Il nome del file di output viene fornito tramite il parametro -o della riga di comando, non il reindirizzamento dell'output.

Ho letto qualcosa sul comando popen forse più adatto al mio caso d'uso, ma non riesco a trovarlo, da quale libreria proviene?

È stato utile?

Soluzione

La causa più comune di tali problemi è l'impostazione errata della variabile d'ambiente in quelle ~ / .bashrc .

Dovresti essere in grado di vedere cosa ncbi non è soddisfatto eseguendo

$SHELL -c '<exact string you pass to system()>'

Un altro modo comune per eseguire il debug è con strace . Esegui:

strace -fo /tmp/strace.out ./myProgram

e cerca /tmp/strace.out per indizi.

Altri suggerimenti

C'è qualche motivo per cui non si desidera fork e exec ? Questo è un linguaggio comune per eseguire un processo da un altro.

popen è nella libreria C standard Vedi la pagina man

Alcune domande veloci:

  • Come si esegue nella shell?
  • Come si esegue nel comando di sistema?
  • Qual è il valore restituito dal sistema?

È preferibile copiare e incollare esattamente dal tuo terminale piuttosto che una descrizione in inglese.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top