文章目录
iOS快捷指令所能做的操作极为有限。假如快捷指令能运行Python程序,那么可操作空间就瞬间变大了。iSH是一款免费的iOS软件,它模拟了一个类似Linux的命令行解释器。我们将在iSH中运行Python程序,然后在快捷指令中获取Python程序的输出。
我们用一个“获取当前日期”的Python程序作为演示(其实快捷指令中本身存在“获取当前日期”的操作,因而此需求可以不用Python,这里仅仅为了演示方便),核心代码如下。
>>> import time
>>> time.strftime('%Y-%m-%d', time.localtime(time.time()))
'2023-02-06'
快捷指令的逻辑如下:
因此iSH的Python脚本内容为:
import time
curr_date = time.strftime('%Y-%m-%d', time.localtime(time.time()))
with open('date.txt', 'w') as f:
f.write(curr_date)
首先在AppStore里面搜索iSH Shell并安装。打开iSH,输入以下命令来安装Python。
设备名称:~# apk add python3
测试一下是否安装成功。
设备名称:~# python3 --version
Python 3.8.5
在iSH中创建脚本的方法有很多,这里介绍两种。
第一种是直接在iSH中手敲代码(没用过vim的同学请自行百度学习)。
设备名称:~# vi get_date.py
然后把上面的Python脚本内容输入进去,保存并退出编辑界面。
第二种是在电脑中写好代码,然后传给iSH。
以win10系统为例,我在目录C:\tmp下写好了get_date.py,然后打开cmd,输入ipconfig查看电脑的IP,找到“无线局域网适配器 WLAN”一栏中的IPv4地址。我电脑显示的IP地址是192.168.3.99。
将cmd切换到Python脚本所在的目录(即C:\tmp),然后在cmd中输入如下命令。
C:\tmp> python3 -m http.server
回到iSH,安装wget。
设备名称:~# apk add wget
安装完成后就可以用wget来下载电脑中的文件了(注意iOS设备必须和电脑在同一个局域网中)。
设备名称:~# wget 192.168.3.99:8000/get_date.py
iSH的命令行解释器是ash。与配置bash类似,先创建.profile文件。
设备名称:~# vi .profile
写入以下内容。
if [ -f ~/.ashrc ]; then
source ~/.ashrc
fi
再创建.ashrc文件。
设备名称:~# vi .ashrc
写入以下内容。
python3 get_date.py &
python3 -m http.server &
其中每行后面的&表示在后台运行。
这样我们就完成了iSH的配置。
关闭iSH,然后重新打开,我们发现默认目录下出现了date.txt文件。
设备名称:~# ls
date.txt
...
查看该文件。
设备名称:~# cat date.txt
2023-02-06
在同一iOS设备上,打开Safari浏览器,在地址栏中输入127.0.0.1:8000/date.txt。若浏览器能打开链接并显示内容,则配置成功。此时iSH中会有一行输出。
127.0.0.1 - - [06/Feb/2023 08:42:56] "GET /date.txt HTTP/1.1" 200 -
逻辑已经很清晰了,直接上图片。

关闭。这个问题是opinion-based.它目前不接受答案。想要改进这个问题?更新问题,以便editingthispost可以用事实和引用来回答它.关闭4年前。Improvethisquestion我想在固定时间创建一系列低音和高音调的哔哔声。例如:在150毫秒时发出高音调的蜂鸣声在151毫秒时发出低音调的蜂鸣声200毫秒时发出低音调的蜂鸣声250毫秒的高音调蜂鸣声有没有办法在Ruby或Python中做到这一点?我真的不在乎输出编码是什么(.wav、.mp3、.ogg等等),但我确实想创建一个输出文件。
我在使用omniauth/openid时遇到了一些麻烦。在尝试进行身份验证时,我在日志中发现了这一点:OpenID::FetchingError:Errorfetchinghttps://www.google.com/accounts/o8/.well-known/host-meta?hd=profiles.google.com%2Fmy_username:undefinedmethod`io'fornil:NilClass重要的是undefinedmethodio'fornil:NilClass来自openid/fetchers.rb,在下面的代码片段中:moduleNetclass
我正在寻找执行以下操作的正确语法(在Perl、Shell或Ruby中):#variabletoaccessthedatalinesappendedasafileEND_OF_SCRIPT_MARKERrawdatastartshereanditcontinues. 最佳答案 Perl用__DATA__做这个:#!/usr/bin/perlusestrict;usewarnings;while(){print;}__DATA__Texttoprintgoeshere 关于ruby-如何将脚
我有一个在Linux服务器上运行的ruby脚本。它不使用rails或任何东西。它基本上是一个命令行ruby脚本,可以像这样传递参数:./ruby_script.rbarg1arg2如何将参数抽象到配置文件(例如yaml文件或其他文件)中?您能否举例说明如何做到这一点?提前谢谢你。 最佳答案 首先,您可以运行一个写入YAML配置文件的独立脚本:require"yaml"File.write("path_to_yaml_file",[arg1,arg2].to_yaml)然后,在您的应用中阅读它:require"yaml"arg
我遵循了教程http://gettingstartedwithchef.com/,第1章。我的运行list是"run_list":["recipe[apt]","recipe[phpap]"]我的phpapRecipe默认Recipeinclude_recipe"apache2"include_recipe"build-essential"include_recipe"openssl"include_recipe"mysql::client"include_recipe"mysql::server"include_recipe"php"include_recipe"php::modul
这里有一个很好的答案解释了如何在Ruby中下载文件而不将其加载到内存中:https://stackoverflow.com/a/29743394/4852737require'open-uri'download=open('http://example.com/image.png')IO.copy_stream(download,'~/image.png')我如何验证下载文件的IO.copy_stream调用是否真的成功——这意味着下载的文件与我打算下载的文件完全相同,而不是下载一半的损坏文件?documentation说IO.copy_stream返回它复制的字节数,但是当我还没有下
我在用Ruby执行简单任务时遇到了一件奇怪的事情。我只想用每个方法迭代字母表,但迭代在执行中先进行:alfawit=("a".."z")puts"That'sanalphabet:\n\n#{alfawit.each{|litera|putslitera}}"这段代码的结果是:(缩写)abc⋮xyzThat'sanalphabet:a..z知道为什么它会这样工作或者我做错了什么吗?提前致谢。 最佳答案 因为您的each调用被插入到在固定字符串之前执行的字符串文字中。此外,each返回一个Enumerable,实际上您甚至打印它。试试
我正在尝试解析一个文本文件,该文件每行包含可变数量的单词和数字,如下所示:foo4.500bar3.001.33foobar如何读取由空格而不是换行符分隔的文件?有什么方法可以设置File("file.txt").foreach方法以使用空格而不是换行符作为分隔符? 最佳答案 接受的答案将slurp文件,这可能是大文本文件的问题。更好的解决方案是IO.foreach.它是惯用的,将按字符流式传输文件:File.foreach(filename,""){|string|putsstring}包含“thisisanexample”结果的
这个问题在这里已经有了答案:关闭10年前。PossibleDuplicate:Pythonconditionalassignmentoperator对于这样一个简单的问题表示歉意,但是谷歌搜索||=并不是很有帮助;)Python中是否有与Ruby和Perl中的||=语句等效的语句?例如:foo="hey"foo||="what"#assignfooifit'sundefined#fooisstill"hey"bar||="yeah"#baris"yeah"另外,类似这样的东西的通用术语是什么?条件分配是我的第一个猜测,但Wikipediapage跟我想的不太一样。
如何检查Ruby文件是否是通过“require”或“load”导入的,而不是简单地从命令行执行的?例如:foo.rb的内容:puts"Hello"bar.rb的内容require'foo'输出:$./foo.rbHello$./bar.rbHello基本上,我想调用bar.rb以不执行puts调用。 最佳答案 将foo.rb改为:if__FILE__==$0puts"Hello"end检查__FILE__-当前ruby文件的名称-与$0-正在运行的脚本的名称。 关于ruby-检查是否