使用 sys.argv 获取 Shell/Python 中的字符串
Get a string in Shell/Python using sys.argv
我从 bash 开始执行脚本 :
$ ./readtext.sh ./InputFiles/applications.txt
这是我的 readtext.sh 代码:
#!/bin/bash
filename=""
counter=1
while IFS=: true; do
line=''
read -r line
if [ -z "$line" ]; then
break
fi
echo "$line"
python3 ./download.py \
-c ./credentials.json \
--blobs \
"$line"
done < "$filename"
我想在 python 文件中打印字符串 ("./InputFiles/applications.txt"),我使用了 sys.argv[1]
但这一行给了我 -c。我怎样才能得到这个字符串?谢谢
这是您可以在您的案例中使用的 python 文件
import sys
file_name = sys.argv[1]
with open(file_name,"r") as f:
data = f.read().split("\n")
print("\n".join(data))
你把参数“$1”传给internal
命令更方便python3
.
如果你不想那样做,你仍然可以通过 /proc
的 trick 获得 external
命令行参数,例如:
$ cat parent.sh
#!/usr/bin/bash
python3 child.py
$ cat child.py
import os
ext = os.popen("cat /proc/" + str(os.getppid()) + "/cmdline").read()
print(ext.split('[=10=]')[2:-1])
$ ./parent.sh aaaa bbbb
['aaaa', 'bbbb']
注:
parent.sh
中的 shebang 行很重要,或者你应该用 bash
执行 ./parent.sh
,否则你将不会在 ps
或 /proc/$PPID/cmdline
.
- 由于
[2:-1]
的原因:ext.split('[=22=]') = ['bash', './parent.sh', 'aaaa', 'bbbb', '']
,./parent.sh
的实际参数从2开始,到-1结束。
更新:感谢@cdarke 的命令“/proc
不可移植”,我不确定这种获取命令行的方式是否更可移植:
$ cat child.py
import os
ext = os.popen("ps " + str(os.getppid()) + " | awk ' { out = \"\"; for(i = 6; i <= NF; i++) out = out$i\" \" } END { print out } ' ").read()
print(ext.split(" ")[1 : -1])
仍然有相同的输出。
我从 bash 开始执行脚本 :
$ ./readtext.sh ./InputFiles/applications.txt
这是我的 readtext.sh 代码:
#!/bin/bash
filename=""
counter=1
while IFS=: true; do
line=''
read -r line
if [ -z "$line" ]; then
break
fi
echo "$line"
python3 ./download.py \
-c ./credentials.json \
--blobs \
"$line"
done < "$filename"
我想在 python 文件中打印字符串 ("./InputFiles/applications.txt"),我使用了 sys.argv[1]
但这一行给了我 -c。我怎样才能得到这个字符串?谢谢
这是您可以在您的案例中使用的 python 文件
import sys
file_name = sys.argv[1]
with open(file_name,"r") as f:
data = f.read().split("\n")
print("\n".join(data))
你把参数“$1”传给internal
命令更方便python3
.
如果你不想那样做,你仍然可以通过 /proc
的 trick 获得 external
命令行参数,例如:
$ cat parent.sh
#!/usr/bin/bash
python3 child.py
$ cat child.py
import os
ext = os.popen("cat /proc/" + str(os.getppid()) + "/cmdline").read()
print(ext.split('[=10=]')[2:-1])
$ ./parent.sh aaaa bbbb
['aaaa', 'bbbb']
注:
parent.sh
中的 shebang 行很重要,或者你应该用bash
执行./parent.sh
,否则你将不会在ps
或/proc/$PPID/cmdline
.- 由于
[2:-1]
的原因:ext.split('[=22=]') = ['bash', './parent.sh', 'aaaa', 'bbbb', '']
,./parent.sh
的实际参数从2开始,到-1结束。
更新:感谢@cdarke 的命令“/proc
不可移植”,我不确定这种获取命令行的方式是否更可移植:
$ cat child.py
import os
ext = os.popen("ps " + str(os.getppid()) + " | awk ' { out = \"\"; for(i = 6; i <= NF; i++) out = out$i\" \" } END { print out } ' ").read()
print(ext.split(" ")[1 : -1])
仍然有相同的输出。