Распаковать список в Python?

Я думаю, что 'unpack' может быть неправильным словарем - извинения, потому что я уверен, что это дублирующий вопрос.

Мой вопрос довольно прост: в функции, которая ожидает список элементов, как я могу передать элемент списка Python без получения ошибки?

my_list = ['red', 'blue', 'orange']
function_that_needs_strings('red', 'blue', 'orange') # works!
function_that_needs_strings(my_list) # breaks!

Конечно, должен быть способ расширить список,

# example conf, the sintaxys only needs to be able to have comments and be easy to edit.
host=www.host.com
administrator_email=guill@company.com
password=xxx

Мне просто нужно найти чистый способ, которым этот файл конфигурации может быть прочитан (проанализирован) из скрипта sh, и в то же время иметь возможность считывать те же параметры из моих скриптов PHP. Без использования XML.

Знаете ли вы хорошее решение для этого?

Гильермо

8
задан Steve 8 October 2014 в 14:00
поделиться

5 ответов

Если вы не хотите исходить из файла, как показал pavanlimo, другой вариант - использовать переменные с помощью цикла:

while read propline ; do 
   # ignore comment lines
   echo "$propline" | grep "^#" >/dev/null 2>&1 && continue
   # if not empty, set the property using declare
   [ ! -z "$propline" ] && declare $propline
done < /path/to/config/file

В PHP применяются те же базовые концепции:

// it's been a long time, but this is probably close to what you need
function isDeclaration($line) {
    return $line[0] != '#' && strpos($line, "=");
}

$filename = "/path/to/config/file";
$handle = fopen($filename, "r");
$contents = fread($handle, filesize($filename));
$lines = explode("\n", $contents); // assuming unix style
// since we're only interested in declarations, filter accordingly.
$decls = array_filter($lines, "isDeclaration");
// Now you can iterator over $decls exploding on "=" to see param/value
fclose($handle);
6
ответ дан 5 December 2019 в 06:09
поделиться
0
ответ дан 5 December 2019 в 06:09
поделиться

для синтаксического анализа ini-файла из sh / bash

#!/bin/bash
#bash 4
shopt -s extglob
while IFS="=" read -r key value
do
  case "$key" in
   !(#*) )
     echo "key: $key, value: $value"
     array["$key"]="$value"
     ;;
  esac
done <"file"
echo php -r myscript.php ${array["host"]}

, затем из PHP, используйте argv

1
ответ дан 5 December 2019 в 06:09
поделиться

Парсер INI файлов Bash также смотрите:

http://ajdiaz.wordpress.com/2008/02/09/bash-ini-parser/

3
ответ дан 5 December 2019 в 06:09
поделиться

Просто укажите исходный файл конфигурации скрипта как другой файл sh!.

Пример:

conf-file.sh:

# A comment
host=www.host.com
administrator_email=guill@company.com
password=xxx

Ваш реальный скрипт:

#!/bin/sh

. ./conf-file.sh

echo $host $administrator_email $passwword

И тот же самый conf-файл можно разобрать на PHP: http://php.net/manual/en /function.parse-ini-file.php

17
ответ дан 5 December 2019 в 06:09
поделиться
Другие вопросы по тегам:

Похожие вопросы: