Я думаю, что '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.
Знаете ли вы хорошее решение для этого?
Гильермо
Если вы не хотите исходить из файла, как показал 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);
для синтаксического анализа 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
Просто укажите исходный файл конфигурации скрипта как другой файл 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