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

时间:2019-02-08 16:30:00

标签: python bash shell sys

我从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。我怎样才能得到这个字符串?谢谢

2 个答案:

答案 0 :(得分:3)

您更容易将参数“ $ 1”传递给internal命令python3

如果您不想这样做,您仍然可以使用external trick 来获取/proc命令行参数,例如:

$ 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('\0')[2:-1])
$ ./parent.sh aaaa bbbb
['aaaa', 'bbbb']

注意:

  1. parent.sh中的shebang行很重要,或者您应使用./parent.sh执行bash,否则在ps或{{1}中将没有命令行参数}。
  2. 由于/proc/$PPID/cmdline[2:-1]的原因,ext.split('\0') = ['bash', './parent.sh', 'aaaa', 'bbbb', '']的实参始于2,终止于-1。

更新:由于@cdarke的命令“ ./parent.sh不可移植”,因此我不确定通过这种方式使命令行更可移植:

/proc

仍然具有相同的输出。

答案 1 :(得分:-1)

这是您可以使用的python文件

inspect.getmodule(meth)

How to use sys.argv

How to use join method inside my python code