gpt4 book ai didi

python - iMac上的Shell脚本不再与High Sierra一起使用

转载 作者:行者123 更新时间:2023-12-01 02:21:55 25 4
gpt4 key购买 nike

我最近将我的iMac 27英寸(2011年中)从优胜美地升级到了High Sierra,我正努力找回以前使用的某些功能!

简要说明一下……首先,我在Raspberry pi3上使用一些Python脚本从地下天气中获取本地天气数据。这些脚本还会处理数据,然后在pi上创建并存储XML文件。我还在pi上运行一个http服务器来查找呼叫。

在使用iRule的iPad上,我有一个名为“天气预报”的按钮。按下此按钮时,它将触发我的ISY994i(Insteon)控制器上的网络资源,该控制器依次调用pi上的http服务器并为其发送参数。当pi收到调用并验证参数时,它将运行另一个python脚本(在pi上),该脚本将先前创建的XML文件中的数据获取,并以适当的格式进行下一步。最后,该脚本通过Apache2将GET请求发送到iMac,以大声读取天气预报。

这在优胜美地上运行得非常好,但是现在我已经升级了,说的那部分无法正常工作!

我在iMac上有3个Shell脚本,在此过程中从pi调用了这些脚本...

saidomethinghttp9a.sh这是第一个调用的脚本,该脚本读取当前的音量级别并将其存储在本地文件中(在iMac上);然后将音量更改为可接受的音量(我使用18);

!/bin/bash
echo -e "Content-type: text/html\n"

PHRASE=`echo "$QUERY_STRING" | sed -n 's/^.*phrase=\([^&]*\).*$/\1/p' | sed "s/+/ /g" | sed "s/%20/ /g"`

cat << junk
<html>
<head>
<title>
saying
</title>
</head>
<body>
junk

currVol=$(osascript -e "get volume settings")

echo "Current Volume Setting = $currVol"

var1=$( echo $currVol | cut -d":" -f1 )
var2=$( echo $currVol | cut -d":" -f2 )
origVol=$( echo $var2 | cut -d"," -f1 )
echo $origVol
parm="set volume output volume $origVol"
echo $parm

destfile="/Users/Sarah/Sound_Volume/Volume1.txt"
echo $parm > $destfile

osascript -e "set volume output volume 18"

cat << junk
</body>
</html>
junk


saidomethinghttp9.sh设置音量级别后,此脚本将根据pi发送的内容执行“说”部分。 pi调用此脚本并发送一个参数,这就是我想要说的话。对于介绍,日期,时间,天气预报和结束,此呼叫重复多次。和

#!/bin/bash

echo -e "Content-type: text/html\n"

PHRASE=`echo "$QUERY_STRING" | sed -n 's/^.*phrase=\([^&]*\).*$/\1/p' | sed "s/+/ /g" | sed "s/%20/ /g"`

cat << junk
<html>
<head>
<title>
saying
</title>
</head>
<body>
junk

say "Hey There"

cat << junk
</body>
</html>
junk


saidomethinghttp9b.sh最后,将调用最后一个脚本,该脚本从第一步中创建的文件中读取原始卷,然后将其重置为该级别。

#!/bin/bash
echo -e "Content-type: text/html\n"

cat << junk
<html>
<head>
<title>
saying
</title>
</head>
<body>
junk

file="/Users/Sarah/Sound_Volume/Volume1.txt"
echo $file
read -d $'\x04' parm < "$file"
echo $parm

osascript -e "$parm"

cat << junk
</body>
</html>
junk


(请注意,由于iTunes上的音乐音量对于“ say”命令来说太大了,我需要逐步调整音量)

在试图找出问题所在时,我尝试了很多事情:


我编辑了脚本“ sayomethinghttp9.sh”,以消除传递给它的参数的“说”,然后简单地在行中说“ Hey there”(注意,上面的代码是已编辑的版本)
然后,我在iMac上打开了一个终端会话,并从那里发出命令...


./saysomethinghttp9a.sh
./saysomethinghttp9.sh
./saysomethinghttp9b.sh



从终端调用这3种脚本都可以,所以这不是问题。

为了调试对iMac的调用,我从过程中取消了iPad,pi和ISY994i,从而简化了过程。相反,我一直在尝试使用浏览器从同一网络上的PC拨打iMac的电话。


http://10.0.1.11/cgi-bin/saysomethinghttp9a.sh
http://10.0.1.11/cgi-bin/saysomethinghttp9.sh
http://10.0.1.11/cgi-bin/saysomethinghttp9a.sh


直接从PC上的浏览器运行脚本的结果是脚本saysomethinghttp9a.sh和saysomethinghttp9b.sh起作用了,而saysomethinghttp9.sh没有起作用!

在尝试从PC上的浏览器进行调用之后,这是来自iMac的访问和错误日​​志条目…

访问日志

10.0.1.195 - - [18/Dec/2017:21:33:30 -0500] "GET /cgi-bin/saysomethinghttp9a.sh HTTP/1.1" 200 197

10.0.1.195 - - [18/Dec/2017:21:34:04 -0500] "-" 408 -

10.0.1.195 - - [18/Dec/2017:21:33:44 -0500] "GET /cgi-bin/saysomethinghttp9.sh HTTP/1.1" 200 53

10.0.1.195 - - [18/Dec/2017:21:33:49 -0500] "GET /cgi-bin/saysomethinghttp9.sh HTTP/1.1" 200 53

10.0.1.195 - - [18/Dec/2017:21:35:05 -0500] "GET /cgi-bin/saysomethinghttp9b.sh HTTP/1.1" 200 135


错误记录

[Mon Dec 18 21:34:44.356130 2017] [cgi:warn] [pid 29997] [client 10.0.1.195:60109] AH01220: Timeout waiting for output from CGI script /Library/WebServer/CGI-Executables/saysomethinghttp9.sh

[Mon Dec 18 21:34:44.356519 2017] [core:error] [pid 29997] (70007)The timeout specified has expired: [client 10.0.1.195:60109] AH00574: ap_content_length_filter: apr_bucket_read() failed

[Mon Dec 18 21:34:49.949284 2017] [cgi:warn] [pid 29575] [client 10.0.1.195:60107] AH01220: Timeout waiting for output from CGI script /Library/WebServer/CGI-Executables/saysomethinghttp9.sh

[Mon Dec 18 21:34:49.949652 2017] [core:error] [pid 29575] (70007)The timeout specified has expired: [client 10.0.1.195:60107] AH00574: ap_content_length_filter: apr_bucket_read() failed


为了全面披露,我的编程经验相对有限。我经常使用在网上找到的示例将事情拼凑起来。

我不知道如何解释上述错误!我所能找到的与“指定的超时已过期”有关的唯一信息与正在处理大量数据的情况有关!就我而言,正在处理的数据很少!

我将对如何进行提供一些帮助或指导。

编辑:

阅读了Mark Setchell的评论后,我在脚本中添加了“ / usr / bin / id”,并首先在终端中运行了该脚本,并看到用户名正确。然后,我在另一台PC上运行了相同的脚本,看到用户名是“ _www”!因此,我然后编辑了httpd.conf(apache2)文件,并更改了包括用户Sarah和Group人员的部分。但是,这不能解决问题!

接下来,我将学习如何“使用su成为该用户并尝试使用脚本”。通过阅读,我一直在寻找使用sudo的建议,最后找到了编辑sudoers文件的建议。因此,我使用命令sudo visudo进行了此操作。然后我在以下行中添加了

莎拉ALL =(ALL)NOPASSWD:全部

然后,我尝试再次从PC运行脚本,但是这次脚本运行了,并在说一遍!

最佳答案

阅读了Mark Setchell的评论后,我在脚本中添加了“ / usr / bin / id”,并首先在终端中运行了该脚本,并看到用户名正确。然后,我在另一台PC上运行了相同的脚本,看到用户名是“ _www”!因此,我然后编辑了httpd.conf(apache2)文件,并更改了包括用户Sarah和Group人员的部分。但是,这不能解决问题!

接下来,我将学习如何“使用su成为该用户并尝试使用脚本”。通过阅读,我一直在寻找使用sudo的建议,最后找到了编辑sudoers文件的建议。因此,我使用命令sudo visudo进行了此操作。然后我在以下行中添加了

莎拉ALL =(ALL)NOPASSWD:全部

然后,我尝试再次从PC运行脚本,但是这次脚本运行了,并在说一遍!

关于python - iMac上的Shell脚本不再与High Sierra一起使用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47880153/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com