簡體   English   中英

QThread不提供被稱為shellscript的輸出

[英]QThread doesn't provide output from called shellscript

我有一個函數,可以執行系統調用並將輸出寫入QTextEdit

string SystemCallFactory::runSysCallWithoutButton(unique_ptr<SystemCall> sysCall)
{
  cout << "Running " << sysCall->getCommand() << endl;

  textEdit->setText("");
  textEdit->repaint();

  QProcess process;
  process.start(QString::fromStdString(sysCall->getCommand()));
  process.waitForFinished();
  QString output(process.readAllStandardOutput());

  textEdit->append(output);
  textEdit->repaint();

  return output.toStdString();
}

問題在於,當getCommand()真實命令(例如ls /etc getCommand()時,此方法有效,但當它引用Shellscript時,則無法正常工作。 在我的通話中,無效的通話看起來像

/home/turtle10000/tilematching.sh /some/folder /some/specific.file

該腳本將執行並執行應做的事情,但是readAllStandardOutput()返回一個空字符串。 當我在終端中運行它時,它將顯示預期的輸出。

這是shellscript:

#!/bin/sh -v

WORKSPACE=$1
SVPFILE=$2

cd $WORKSPACE
ls -1 *.all > datalist.0.mb-1

mbset -I datalist.0.mb-1 -PSVPMODE:1 -PSVPFILE:$SVPFILE
mbprocess -I datalist.0.mb-1
ls -1 *p.mb58 > datalist.1.mb-1

mbset -I datalist.1.mb-1 -PSONAROFFSETX:-0.079 -PSONAROFFSETY:0.196 -PSONAROFFSETZ:0.048 -PVRUOFFSETX:-0.4473 -PVRUOFFSETY:0.000 -PVRUOFFSETZ:-0.3395 -PROLLBIAS:0.1 -PPITCHBIAS:1.32
mbprocess -I datalist.1.mb-1
ls -1 *pp.mb58 > datalist.2.mb-1

mblist -I datalist.2.mb-1 -MA -O^X^Y-z -JU > output.xyz 

#remove broken lines (error in input files)
sed -ie '/      /d' output.xyz 

編輯:正如Botje所猜測的,某些輸出出現在stderr中而不是stdout中。

正如Botje所建議的那樣,我檢查了輸出是否到達stderr,並且確實如此。 無論出於何種原因, mb-system軟件包中的mbsetmbprocess工具的輸出都將mbset到stderr。

在這種情況下,我更改了行

QString output(process.readAllStandardOutput());

QString output(process.readAllStandardError());

另一個選擇可能是在腳本中將stderr輸出引導到stdout。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM