Недопустимый синтаксис Python в подпроцессе.check_output

#python #jupyter-notebook #subprocess

Вопрос:

У меня возникли проблемы при передаче этого ввода в качестве параметра этой функции

входные данные:

 command = (
                f"'{self.script_dir   'data.sh'}' "
                f"-D '{self.data_dir}' "
                f"-T '{self.tfds_dir}' "
                f"-R '{self.records_dir}' "
                f"-j {data_url} " 
                f"-a {annotations_url} "
                f"-m {detections_url} "
                f"-I '{self.params['img_dir']}' "
                f"-r {self.params['use_records']} "
                f"-d {self.params['dataset']} "
                f"-i {self.params['download_images']} "
            ),
            message='Data files downloaded.n'
 

функция:

 def call_bash(command, message=None):
    try:
        output = subprocess.check_output(
            command, 
            shell=True, 
            stderr=subprocess.STDOUT,
        )
        if message is not None:
            print(message) 
        return output
    except subprocess.CalledProcessError as e:
        print(e.output)
        print("Exiting program...")
        sys.exit()
 

Он отлично работал на colab, но когда я запускал программу в ноутбуке jupyter, я получил эту синтаксическую ошибку:

 f"'{self.script_dir   'data.sh'}' "
                                      ^
SyntaxError: invalid syntax
 

Комментарии:

1. добавить запятые? что именно вы хотите, чтобы он делал?

2. Если Jupyter работает на Python <= 3.5, то именно поэтому строка f -string выдает синтаксическую ошибку.

3. нет, jupyter работает на версии 3.6.9, и эта команда должна проверять содержимое какого-либо параметра и каталога

4. этот ввод и функция на самом деле не записываются напрямую в ячейку, они были вызваны из скрипта .py с использованием !python

5. @drum: Вам не нужно добавлять запятые; смежные строковые литералы (включая f-строковые литералы) объединяются. Круглые скобки необходимы для того, чтобы они были смежными , операция не пытается создать a tuple , они просто пытаются определить длинный литерал f-строки в нескольких строках, чтобы их длина строк была разумной, а содержимое читаемым. Добавление запятых сделало бы его tuple состоящим из множества маленьких строк, а не из одной большой строки.