我有一個非常復雜的命令串列,它加載一個虛擬環境并在給定文本上執行幾個命令。它與 system() 一起作業正常,但與 QProcess::execute 一起失敗。這是一個無賴,因為我想使用
QProcess process;
process.readAllStandardOutput();
在不弄亂管道的情況下讀取輸出。有沒有辦法給行程一個“愚蠢的”命令字串,它像 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似乎弄亂了引數:
usage: program_name [-h] [--list_models [LIST_MODELS]] [--text TEXT]
Edit1:popen 解決方案(丑陋但有效):
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:請求的除錯輸出
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
uj5u.com熱心網友回復:
正如在其他地方指出的那樣,基本問題是避免通過任何外殼會QProcess遇到一些麻煩。話雖如此,您應該能夠通過顯式呼叫 shell 來實作您想要的。
假設您通常運行的命令bash是ls -l | grep '\.'...
QProcess process;
QString shell_command = "ls -l | grep '\.'";
process.start("bash", { "-c", shell_command });
現在您可以像閱讀任何其他QProcess.
[請注意,這或多或少是以前帖子Qt的版本。]
轉載請註明出處,本文鏈接:https://www.uj5u.com/caozuo/410137.html
標籤:
上一篇:帶有可移動邊框的Qt框架
下一篇:不同回應請求之間是否有時間差,
