使用 sys.argv 在 Shell/Python 中获取一个字符串



我从bash开始,我正在执行一个脚本:

$ ./readtext.sh ./InputFiles/applications.txt 

这是我的 readtext.sh 代码:

#!/bin/bash
filename="$1"
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。我怎样才能得到这个字符串?谢谢

参数"$1"传递给internal命令python3会更容易。

如果你不想这样做,你仍然可以通过/proc技巧获取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('')[2:-1])
$ ./parent.sh aaaa bbbb
['aaaa', 'bbbb']

注意:

  1. parent.sh中的 shebang 行很重要,或者你应该用 bash 执行./parent.sh,否则你将在 ps/proc/$PPID/cmdline 中得到任何命令行参数。
  2. [2:-1] ext.split('') = ['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])

仍然具有相同的输出。

这是您可以在您的情况下使用的 python 文件

import sys
file_name = sys.argv[1]
with open(file_name,"r") as f:
    data = f.read().split("n")
print("n".join(data))

如何使用 sys.argv

如何在我的 python 代码中使用连接方法

最新更新