从 iTerm2 的 Python API 文档上提到:
~/Library/ApplicationSupport/iTerm2/iterm2env/versions/*/bin/python3 YourScript.py
假设 versions
下只有一个文件夹到没有歧义,但如果有多个该怎么办,Shell 应该有规定,但我不知道从哪里找。
我试了下貌似是选择按名称排序(同 ls(1)
的默认排序)的第一个,但是我还是想知道对应的解释。
测试
mkdir -p /tmp/versions/{1,2,3}
echo 'echo 1' > /tmp/versions/1/run
echo 'echo 2' > /tmp/versions/2/run
echo 'echo 3' > /tmp/versions/3/run
chmod +x /tmp/versions/*/run
~ $ tree /tmp/versions
/tmp/versions
├── 1
│ └── run
├── 2
│ └── run
└── 3
└── run
3 directories, 3 files
~ $ /tmp/versions/*/run
1
~ $
把你的测试文件改一下,变成:
$ cat /tmp/versions/*/run
echo 1: $@
echo 2: $@
echo 3: $@
每个 run
都把参数打印出来。
再测试:
$ /tmp/versions/*/run foo
1: /tmp/versions/2/run /tmp/versions/3/run foo
结果跟手动展开通配符是一样的:
$ /tmp/versions/1/run /tmp/versions/2/run /tmp/versions/3/run foo
1: /tmp/versions/2/run /tmp/versions/3/run foo
2/run
和 3/run
都变成了 1/run
参数。
文档提到的 bin/python3
到底是什么,是一个名为 python3
的脚本,还是一个指向 python3
解释器的链接?如果是前者,它应该要能处理通配符展开之后的情况,否则应该会出错。如果是后者,应该也会出错吧?我没试过在命令行执行 $ /path/to/python35 /path/to/python36 /path/to/python37 MyScript.py
不知会出现什么情况
1 个赞
哦,原来是普通的通配符展开,我误以为是有特殊规定。
是个脚本二进制可执行文件。
这个文档不太清楚,误导了我,它之所以能工作是因为目前我的 versions/
下只有一个 3.7.2
。不过我想它主要是不想用特定的 Python 版本,因为每个人的 Python 版本多半不同。
文档在这里:Running a Script — iTerm2 Python API 0.26 documentation
会报错,/usr/local/bin/python3
不是文本文件:
~ $ /usr/local/bin/python3 /usr/local/bin/python3 test.py
File "/usr/local/bin/python3", line 1
SyntaxError: Non-UTF-8 code starting with '\xcf' in file /usr/local/bin/python3 on line 1, but no encoding declared; see http://python.org/dev/peps/pep-0263/ for details
~ $
能够在一个 Python 里运行另一个 Python 不太可能故意为之。
此外 python
一次只能运行一个脚本:
~ $ cd /tmp
/tmp $ echo 'print(1)' > 1.py
/tmp $ echo 'print(2)' > 2.py
/tmp $ echo 'print(3)' > 3.py
/tmp $ python3 1.py 2.py 3.py
1
/tmp $