المعارف التقليدية، تى سى ال إكسيك ستدير، المعياري بشكل منفصل

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

  •  06-07-2019
  •  | 
  •  

سؤال

ولدي النصي تى سى ال.

والمشكلة هي أن لدي لاستدعاء السيناريو الذي يمكن أن يكتب شيئا لستدير (انها ليست فاشلا نقديا).

وأود أن التقاط ستدير وحدة المعياري في المعارف التقليدية / تى سى ال.

if { [catch {exec "./script.sh" << $data } result] } {
   puts "$::errorInfo"
}

وهذا الرمز سيعود نتيجة بلدي ولكنه يحتوي أيضا ستدير.

وأيضا أود أن الحصول على النتيجة إلى متغير.

وشكرا مقدما ...

هل كانت مفيدة؟

المحلول

إذا قمت بفتح الأمر كما هو أنبوب بدلا من استخدام exec، يمكنك فصل المعياري وستدير. انظر http://wiki.tcl.tk/close

set data {here is some data}
set command {sh -c {
    echo "to stdout"
    read line
    echo "$line"
    echo >&2 "to stderr"
    exit 42
}}
set pipe [open "| $command" w+]
puts $pipe $data
flush $pipe
set standard_output [read -nonewline $pipe]
set exit_status 0
if {[catch {close $pipe} standard_error] != 0} {
    global errorCode
    if {"CHILDSTATUS" == [lindex $errorCode 0]} {
        set exit_status [lindex $errorCode 2]
    }
}
puts "exit status is $exit_status"
puts "captured standard output: {$standard_output}"
puts "captured standard error: {$standard_error}"

نصائح أخرى

استخدم 2> لإعادة توجيه ستدير:

if { [catch {exec "./script.sh" << $data 2> error.txt} result } {
   puts "$::errorInfo"
}

وبعد ذلك يمكنك قراءة محتويات ERROR.TXT:

package require Tclx; # Needed for the read_file command
set err [read_file error.txt]
puts "s1: err = $err"
مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top