4

我想以 zenity 获取表单的值(用户编写的 Ipaddress 值),以便使用 ffmpeg 进行一些视频流,我尝试了几个示例,例如列表、表单等

zenity --forms --title="Add Friend" --text="Enter Multicast address" --separator="," --add-entry="IP address" --add-entry="PORT" 

或者

if zenity --list --title="Record Video Stream"  --text "Enter the Multicast IP address and port of each of the video stream" --column "Video IP" --print-column=2 --multiple --column "PORT" --editable ip="0.0.0.0" port="2002"
4

1 回答 1

8

输出zenity是输入的文本,由--separator字符分隔。退出代码是它是否被接受(即OKCancel选择)。

例如(在 bash 中):

OUTPUT=$(zenity --forms --title="Add Friend" --text="Enter Multicast address" --separator="," --add-entry="IP address" --add-entry="PORT")
accepted=$?
if ((accepted != 0)); then
    echo "something went wrong"
    exit 1
fi

ip=$(awk -F, '{print $1}' <<<$OUTPUT)
port=$(awk -F, '{print $2}' <<<$OUTPUT)

这会将 zenity 中的 ip 地址放入 ip 变量中,并将 zenity 形式中的端口放入 port 变量中。

第二个例子稍微复杂一些,它使用“可编辑”模板,这意味着如果数据没有改变,你不会得到任何输出,但它遵循与前一个例子类似的模式。现在,因为您说过--print-column=,它只在输出中显示该列。不幸的是,--list用于从项目列表中选择一个或多个行。编辑多行将起作用,但您必须选择每一行才能从该行获取输出,即使在对数据进行了更改之后也是如此。在这种情况下,因为您没有指定--separator选项,所以使用默认分隔符|

在第二种情况下,从用户输入的角度来看,使用可编辑和列表输入并不是列表的设计目的。

于 2014-01-26T22:57:41.327 回答