Получить строку в Shell / Python, используя sys.argv - PullRequest
0 голосов
/ 08 февраля 2019

Я начинаю с 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"

Я хочу напечатать строку ("./InputFiles/applications.txt") в файле python, я использовал sys.argv[1], но эта строка дает мне -c.Как я могу получить эту строку?Спасибо

Ответы [ 2 ]

0 голосов
/ 08 февраля 2019

Вам проще передать параметр "$ 1" в команду internal python3.

Если вы не хотите этого делать, вы все равно можете получить команду externalпараметр строки с трюком из /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, илиВы должны выполнить ./parent.sh с bash, иначе вы не получите параметр командной строки в ps или /proc/$PPID/cmdline.
  2. По причине [2:-1]: ext.split('\0') = ['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])

, которые все еще имеют тот же вывод.

0 голосов
/ 08 февраля 2019

Это файл 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

...