Przekazanie asterisku jako asterisku (*) w parametrze wywołania polecenia linux

0

Dzień dobry.

Mam problem. Chcę przekazać gwiazdkę (asterisk) w argumencie wiersza polecenia w konsoli i móc go odczytać w programie w Pythonie jako asterisk. Np:

./program.py "abc * cba"

Przekazania dokonuję przez php:

<?php
        $command = escapeshellcmd('./program.py ' . "abc * cba");
        $output = shell_exec($command);

Niestety ten kod zastępuje * przez \*

Czy poza mechaniczną zamianą \\ na \0 (pusty ciąg) da się to jakoś obejść?

1

Ale chcesz żeby shell widział gwiazdkę czy żeby widział wszystkie pliki w aktualnym folderze zamiast niej?

0

Nie. Chcę przekazać string w cudzysłowie, i chcę, by wszystkie znaki w tym stringu były takie same w pythonie. W tym asteriski.
Zauważyłem, że jak usunę spacje wewnątrz parametru w cudzysłowie to działa. Ale jak dodam jeszcze \" na krańcach to kicha, nie działa.

PS. To jest chyba po stronie PHP bo jak podaję parametr bezpośrednio przez konsolę, to działa bardzo dobrze. Tylko jak przekazuję przez escapeshellcmd to zamienia mi znaki :/

1

Escaping tak działa. Myślałem że dobrze będzie:

... . "\"abc * cba\"");

Masz inną opcję niż escaping?

Ewentualnie wołaj skrypt bashowy w którym wywołasz skrypt pythona.

0

Ale muszę wywołać skrypt z poziomu php, bo użytkownik ma zdecydować co chce wysłać. To co wyżej napisałeś nie działa, zamienia mi asterisk * na \* i skrypt się sypie.

Co masz na myśli przez escaping?

1

@mpaw: wołasz metodę z "escaping" w nazwie, co oznacza, że jakiś escaping zachodzi - pewnie ten którego chcesz uniknąć. Dlatego szukałbym innej metody wołania skryptów. Bez escapingu.

1

Aaa :) Faktycznie :)

Gitara. Wywaliłem escapecm... i działa idealnie. Będę musiał tylko zabezpieczyć się przez ewentualnymi iniekcjami. Dzięki!

Zarejestruj się i dołącz do największej społeczności programistów w Polsce.

Otrzymaj wsparcie, dziel się wiedzą i rozwijaj swoje umiejętności z najlepszymi.