I have a pretty complicate command list, which loads a virtual env and executes several commands on a given text. It works fine with system() but fails with QProcess::execute. This is a bummer since I want to use
QProcess process;
process.readAllStandardOutput();
to read the output without messing with pipes. Is there a way to give a process just a "stupid" command string, which it executes like system() ?
command = "bash -c \"" prepend "\\\"" text "\\\"" append "\"";
std::cout << command.toStdString().c_str() << std::endl;
//qDebug() << QProcess::execute(command.toStdString().c_str());
system(command.toStdString().c_str());
QT seems to mess up the parameters:
usage: program_name [-h] [--list_models [LIST_MODELS]] [--text TEXT]
Edit1: solution with popen (ugly but working):
FILE *fp;
char path[1035];
fp = popen(command.toStdString().c_str(), "r");
if (fp == NULL)
{
printf("Failed to run command\n" );
exit(1);
}
while (fgets(path, sizeof(path), fp) != NULL)
{
QString line = path;
if(line.contains("Keyword"))
{
qDebug() << "=============================";
qDebug() << line;
qDebug() << "=============================";
}
}
pclose(fp);
Edit2: Requested debug output
programm_name started
bash -x -c "source /home/myusername/anaconda3/bin/activate; conda activate myenv; programm_name --text \"test\" --model_name tts_models/en/ljspeech/tacotron2-DCA --vocoder_name vocoder_models/en/ljspeech/mulitband-melgan --out_path /home/myusername/projects/tts/soundoutput/"
unset _mlre _mlIFS _mlshdbg
'[' 0 = 1 ']'
'[' -n x ']'
_mlIFS='
'
IFS=' '
'[' -n '' ']'
/usr/bin/tclsh /usr/lib/x86_64-linux-gnu/modulecmd.tcl bash autoinit
eval 'module()' '{
' unset _mlre _mlIFS '_mlshdbg;
' if '[' '"${MODULES_SILENT_SHELL_DEBUG:-0}"' = ''\''1'\''' '];' 'then
' case '"$-"' 'in
' '*v*x*)' set ' vx;' '_mlshdbg='\''vx'\''' ';;
' '*v*)' set ' v;' '_mlshdbg='\''v'\''' ';;
' '*x*)' set ' x;' '_mlshdbg='\''x'\''' ';;
' '*)' '_mlshdbg='\'''\''' ';;
' 'esac;
' 'fi;
' if '[' -n '"${IFS x}"' '];' 'then
' '_mlIFS=$IFS;
' 'fi;
' 'IFS='\''' ''\'';
' for _mlv in '${MODULES_RUN_QUARANTINE:-};' 'do
' if '[' '"${_mlv}"' = '"${_mlv##*[!A-Za-z0-9_]}"' -a '"${_mlv}"' = '"${_mlv#[0-9]}"' '];' 'then
' if '[' -n '"`eval' ''\''echo' '${'\''$_mlv'\'' x}'\''`"' '];' 'then
' '_mlre="${_mlre:-}${_mlv}_modquar='\''`eval' ''\''echo' '${'\''$_mlv'\''}'\''`'\''' '";
' 'fi;
' '_mlrv="MODULES_RUNENV_${_mlv}";
' '_mlre="${_mlre:-}${_mlv}='\''`eval' ''\''echo' '${'\''$_mlrv'\'':-}'\''`'\''' '";
' 'fi;
' 'done;
' if '[' -n '"${_mlre:-}"' '];' 'then
' '_mlre="eval' '${_mlre}";
' 'fi;
' eval '`${_mlre:-}/usr/bin/tclsh' /usr/lib/x86_64-linux-gnu/modulecmd.tcl bash '$*`;
' '_mlstatus=$?;
' if '[' -n '"${_mlIFS x}"' '];' 'then
' 'IFS=$_mlIFS;
' 'else
' unset 'IFS;
' 'fi;
' if '[' -n '"${_mlshdbg:-}"' '];' 'then
' set '-$_mlshdbg;
' 'fi;
' unset _mlre _mlv _mlrv _mlIFS '_mlshdbg;
' return '$_mlstatus;
};
MODULES_CMD=/usr/lib/x86_64-linux-gnu/modulecmd.tcl;' export 'MODULES_CMD;
MODULESHOME=/usr/share/modules;' export 'MODULESHOME;
test' '0;'
MODULES_CMD=/usr/lib/x86_64-linux-gnu/modulecmd.tcl
export MODULES_CMD
MODULESHOME=/usr/share/modules
export MODULESHOME
test 0
'[' -n x ']'
IFS='
'
unset _mlIFS
unset _mlre _mlv _mlrv
'[' 0 = 1 ']'
'[' -t 1 ']'
export -f module
export -f switchml
ENV=/usr/share/modules/init/profile.sh
export ENV
BASH_ENV=/usr/share/modules/init/bash
export BASH_ENV
'[' 4 -ge 3 ']'
[[ hxBc =~ i ]]
[[ ! :/usr/lib/qt5/bin:/usr/bin:/home/myusername/.local/bin:/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/games:/usr/local/games:/snap/bin: =~ :/usr/bin: ]]
manpath
manpath=/usr/share/man:/usr/local/man:/usr/local/share/man
[[ ! :/usr/share/man:/usr/local/man:/usr/local/share/man: =~ :/usr/share/man: ]]
'[' -n '' ']'
source /home/myusername/anaconda3/bin/activate
_CONDA_ROOT=/home/myusername/anaconda3
. /home/myusername/anaconda3/etc/profile.d/conda.sh
export CONDA_EXE=/home/myusername/anaconda3/bin/conda
CONDA_EXE=/home/myusername/anaconda3/bin/conda
export _CE_M=
_CE_M=
export _CE_CONDA=
_CE_CONDA=
export CONDA_PYTHON_EXE=/home/myusername/anaconda3/bin/python
CONDA_PYTHON_EXE=/home/myusername/anaconda3/bin/python
'[' -z '' ']'
export CONDA_SHLVL=0
CONDA_SHLVL=0
'[' -n '' ']'
dirname /home/myusername/anaconda3/bin/conda
dirname /home/myusername/anaconda3/bin
PATH=/home/myusername/anaconda3/condabin:/usr/lib/qt5/bin:/usr/bin:/home/myusername/.local/bin:/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/games:/usr/local/games:/snap/bin
export PATH
'[' -z '' ']'
PS1=
conda activate
'[' 1 -lt 1 ']'
local cmd=activate
shift
case "$cmd" in
__conda_activate activate
'[' -n '' ']'
local cmd=activate
shift
local ask_conda
CONDA_INTERNAL_OLDPATH=/home/myusername/anaconda3/condabin:/usr/lib/qt5/bin:/usr/bin:/home/myusername/.local/bin:/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/games:/usr/local/games:/snap/bin
__add_sys_prefix_to_path
'[' -n '' ']'
dirname /home/myusername/anaconda3/bin/conda
SYSP=/home/myusername/anaconda3/bin
dirname /home/myusername/anaconda3/bin
SYSP=/home/myusername/anaconda3
'[' -n '' ']'
PATH=/home/myusername/anaconda3/bin:/home/myusername/anaconda3/condabin:/usr/lib/qt5/bin:/usr/bin:/home/myusername/.local/bin:/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/games:/usr/local/games:/snap/bin
export PATH
PS1=
/home/myusername/anaconda3/bin/conda shell.posix activate
ask_conda='PS1='\''(base) '\''
export PATH='\''/home/myusername/anaconda3/bin:/home/myusername/anaconda3/condabin:/usr/lib/qt5/bin:/usr/bin:/home/myusername/.local/bin:/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/games:/usr/local/games:/snap/bin'\''
export CONDA_PREFIX='\''/home/myusername/anaconda3'\''
export CONDA_SHLVL='\''1'\''
export CONDA_DEFAULT_ENV='\''base'\''
export CONDA_PROMPT_MODIFIER='\''(base) '\''
export CONDA_EXE='\''/home/myusername/anaconda3/bin/conda'\''
export _CE_M='\'''\''
export _CE_CONDA='\'''\''
export CONDA_PYTHON_EXE='\''/home/myusername/anaconda3/bin/python'\'''
rc=0
PATH=/home/myusername/anaconda3/condabin:/usr/lib/qt5/bin:/usr/bin:/home/myusername/.local/bin:/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/games:/usr/local/games:/snap/bin
eval 'PS1='\''(base) '\''
export PATH='\''/home/myusername/anaconda3/bin:/home/myusername/anaconda3/condabin:/usr/lib/qt5/bin:/usr/bin:/home/myusername/.local/bin:/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/games:/usr/local/games:/snap/bin'\''
export CONDA_PREFIX='\''/home/myusername/anaconda3'\''
export CONDA_SHLVL='\''1'\''
export CONDA_DEFAULT_ENV='\''base'\''
export CONDA_PROMPT_MODIFIER='\''(base) '\''
export CONDA_EXE='\''/home/myusername/anaconda3/bin/conda'\''
export _CE_M='\'''\''
export _CE_CONDA='\'''\''
export CONDA_PYTHON_EXE='\''/home/myusername/anaconda3/bin/python'\'''
PS1='(base) '
export PATH=/home/myusername/anaconda3/bin:/home/myusername/anaconda3/condabin:/usr/lib/qt5/bin:/usr/bin:/home/myusername/.local/bin:/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/games:/usr/local/games:/snap/bin
PATH=/home/myusername/anaconda3/bin:/home/myusername/anaconda3/condabin:/usr/lib/qt5/bin:/usr/bin:/home/myusername/.local/bin:/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/games:/usr/local/games:/snap/bin
export CONDA_PREFIX=/home/myusername/anaconda3
CONDA_PREFIX=/home/myusername/anaconda3
export CONDA_SHLVL=1
CONDA_SHLVL=1
export CONDA_DEFAULT_ENV=base
CONDA_DEFAULT_ENV=base
export 'CONDA_PROMPT_MODIFIER=(base) '
CONDA_PROMPT_MODIFIER='(base) '
export CONDA_EXE=/home/myusername/anaconda3/bin/conda
CONDA_EXE=/home/myusername/anaconda3/bin/conda
export _CE_M=
_CE_M=
export _CE_CONDA=
_CE_CONDA=
export CONDA_PYTHON_EXE=/home/myusername/anaconda3/bin/python
CONDA_PYTHON_EXE=/home/myusername/anaconda3/bin/python
'[' 0 '!=' 0 ']'
__conda_hashr
'[' -n '' ']'
'[' -n '' ']'
hash -r
conda activate myenv
'[' 2 -lt 1 ']'
local cmd=activate
shift
case "$cmd" in
__conda_activate activate myenv
'[' -n '' ']'
local cmd=activate
shift
local ask_conda
CONDA_INTERNAL_OLDPATH=/home/myusername/anaconda3/bin:/home/myusername/anaconda3/condabin:/usr/lib/qt5/bin:/usr/bin:/home/myusername/.local/bin:/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/games:/usr/local/games:/snap/bin
__add_sys_prefix_to_path
'[' -n '' ']'
dirname /home/myusername/anaconda3/bin/conda
SYSP=/home/myusername/anaconda3/bin
dirname /home/myusername/anaconda3/bin
SYSP=/home/myusername/anaconda3
'[' -n '' ']'
PATH=/home/myusername/anaconda3/bin:/home/myusername/anaconda3/bin:/home/myusername/anaconda3/condabin:/usr/lib/qt5/bin:/usr/bin:/home/myusername/.local/bin:/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/games:/usr/local/games:/snap/bin
export PATH
PS1='(base) '
/home/myusername/anaconda3/bin/conda shell.posix activate myenv
ask_conda='PS1='\''(myenv) '\''
export PATH='\''/home/myusername/anaconda3/envs/myenv/bin:/home/myusername/anaconda3/condabin:/usr/lib/qt5/bin:/usr/bin:/home/myusername/.local/bin:/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/games:/usr/local/games:/snap/bin'\''
export CONDA_PREFIX='\''/home/myusername/anaconda3/envs/myenv'\''
export CONDA_SHLVL='\''2'\''
export CONDA_DEFAULT_ENV='\''myenv'\''
export CONDA_PROMPT_MODIFIER='\''(myenv) '\''
export CONDA_EXE='\''/home/myusername/anaconda3/bin/conda'\''
export _CE_M='\'''\''
export _CE_CONDA='\'''\''
export CONDA_PYTHON_EXE='\''/home/myusername/anaconda3/bin/python'\''
export CONDA_PREFIX_1='\''/home/myusername/anaconda3'\''
. "/home/myusername/anaconda3/envs/myenv/etc/conda/activate.d/mpivars.activate.sh"'
rc=0
PATH=/home/myusername/anaconda3/bin:/home/myusername/anaconda3/condabin:/usr/lib/qt5/bin:/usr/bin:/home/myusername/.local/bin:/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/games:/usr/local/games:/snap/bin
eval 'PS1='\''(myenv) '\''
export PATH='\''/home/myusername/anaconda3/envs/myenv/bin:/home/myusername/anaconda3/condabin:/usr/lib/qt5/bin:/usr/bin:/home/myusername/.local/bin:/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/games:/usr/local/games:/snap/bin'\''
export CONDA_PREFIX='\''/home/myusername/anaconda3/envs/myenv'\''
export CONDA_SHLVL='\''2'\''
export CONDA_DEFAULT_ENV='\''myenv'\''
export CONDA_PROMPT_MODIFIER='\''(myenv) '\''
export CONDA_EXE='\''/home/myusername/anaconda3/bin/conda'\''
export _CE_M='\'''\''
export _CE_CONDA='\'''\''
export CONDA_PYTHON_EXE='\''/home/myusername/anaconda3/bin/python'\''
export CONDA_PREFIX_1='\''/home/myusername/anaconda3'\''
. "/home/myusername/anaconda3/envs/myenv/etc/conda/activate.d/mpivars.activate.sh"'
PS1='(myenv) '
export PATH=/home/myusername/anaconda3/envs/myenv/bin:/home/myusername/anaconda3/condabin:/usr/lib/qt5/bin:/usr/bin:/home/myusername/.local/bin:/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/games:/usr/local/games:/snap/bin
PATH=/home/myusername/anaconda3/envs/myenv/bin:/home/myusername/anaconda3/condabin:/usr/lib/qt5/bin:/usr/bin:/home/myusername/.local/bin:/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/games:/usr/local/games:/snap/bin
export CONDA_PREFIX=/home/myusername/anaconda3/envs/myenv
CONDA_PREFIX=/home/myusername/anaconda3/envs/myenv
export CONDA_SHLVL=2
CONDA_SHLVL=2
export CONDA_DEFAULT_ENV=myenv
CONDA_DEFAULT_ENV=myenv
export 'CONDA_PROMPT_MODIFIER=(myenv) '
CONDA_PROMPT_MODIFIER='(myenv) '
export CONDA_EXE=/home/myusername/anaconda3/bin/conda
CONDA_EXE=/home/myusername/anaconda3/bin/conda
export _CE_M=
_CE_M=
export _CE_CONDA=
_CE_CONDA=
export CONDA_PYTHON_EXE=/home/myusername/anaconda3/bin/python
CONDA_PYTHON_EXE=/home/myusername/anaconda3/bin/python
export CONDA_PREFIX_1=/home/myusername/anaconda3
CONDA_PREFIX_1=/home/myusername/anaconda3
. /home/myusername/anaconda3/envs/myenv/etc/conda/activate.d/mpivars.activate.sh
'[' '' '!=' 1 ']'
export I_MPI_ROOT=/home/myusername/anaconda3/envs/myenv
I_MPI_ROOT=/home/myusername/anaconda3/envs/myenv
'[' -z '' ']'
export CLASSPATH=/home/myusername/anaconda3/envs/myenv/lib/mpi.jar
CLASSPATH=/home/myusername/anaconda3/envs/myenv/lib/mpi.jar
'[' -z '' ']'
manpath
export MANPATH=/home/myusername/anaconda3/envs/myenv/share/man:/home/myusername/anaconda3/envs/myenv/man:/home/myusername/anaconda3/man:/usr/share/man:/usr/local/man:/usr/local/share/man
MANPATH=/home/myusername/anaconda3/envs/myenv/share/man:/home/myusername/anaconda3/envs/myenv/man:/home/myusername/anaconda3/man:/usr/share/man:/usr/local/man:/usr/local/share/man
'[' -z '' ']'
i_mpi_ofi_library_internal=1
case "$i_mpi_ofi_library_internal" in
export PATH=/home/myusername/anaconda3/envs/myenv/bin/libfabric:/home/myusername/anaconda3/envs/myenv/bin:/home/myusername/anaconda3/condabin:/usr/lib/qt5/bin:/usr/bin:/home/myusername/.local/bin:/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/games:/usr/local/games:/snap/bin
PATH=/home/myusername/anaconda3/envs/myenv/bin/libfabric:/home/myusername/anaconda3/envs/myenv/bin:/home/myusername/anaconda3/condabin:/usr/lib/qt5/bin:/usr/bin:/home/myusername/.local/bin:/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/games:/usr/local/games:/snap/bin
export LD_LIBRARY_PATH=/home/myusername/anaconda3/envs/myenv/lib/libfabric:/usr/lib/x86_64-linux-gnu
LD_LIBRARY_PATH=/home/myusername/anaconda3/envs/myenv/lib/libfabric:/usr/lib/x86_64-linux-gnu
'[' -z '' ']'
export LIBRARY_PATH=/home/myusername/anaconda3/envs/myenv/lib/libfabric
LIBRARY_PATH=/home/myusername/anaconda3/envs/myenv/lib/libfabric
export FI_PROVIDER_PATH=/home/myusername/anaconda3/envs/myenv/lib/libfabric/prov:/usr/lib64/libfabric
FI_PROVIDER_PATH=/home/myusername/anaconda3/envs/myenv/lib/libfabric/prov:/usr/lib64/libfabric
'[' 0 '!=' 0 ']'
__conda_hashr
'[' -n '' ']'
'[' -n '' ']'
hash -r
programm_name --text 'test --model_name' tts_models/en/ljspeech/tacotron2-DCA --vocoder_name vocoder_models/en/ljspeech/mulitband-melgan --out_path /home/myusername/projects/tts/soundoutput/
2022-01-05 14:51:05.187922: I tensorflow/stream_executor/platform/default/dso_loader.cc:48] Successfully opened dynamic library libcudart.so.10.1
usage: programm_name [-h] [--list_models [LIST_MODELS]] [--text TEXT]
[--model_name MODEL_NAME] [--vocoder_name VOCODER_NAME]
[--config_path CONFIG_PATH] [--model_path MODEL_PATH]
[--out_path OUT_PATH] [--use_cuda USE_CUDA]
[--vocoder_path VOCODER_PATH]
[--vocoder_config_path VOCODER_CONFIG_PATH]
[--speakers_json SPEAKERS_JSON] [--speaker_idx SPEAKER_IDX]
[--gst_style GST_STYLE] [--save_spectogram SAVE_SPECTOGRAM]
programm_name: error: unrecognized arguments: tts_models/en/ljspeech/tacotron2-DCA
2
CodePudding user response:
As pointed out elsewhere the basic problem is that QProcess goes to some trouble to avoid going through any shell. Having said that you should be able to achieve what you want by invoking a shell explicitly.
Let's say the command you would usually run under bash is ls -l | grep '\.' ...
QProcess process;
QString shell_command = "ls -l | grep '\.'";
process.start("bash", { "-c", shell_command });
Now you can read the command's standard output/error streams as you would with any other QProcess.
[Note that this is more or less the Qt version of a previous post.]
