Как выполнить файл, записанный в C из python, передавая ему строковые значения и принимая / сохраняя строку, возвращаемую в качестве вывода. (Linux) - PullRequest
1 голос
/ 18 февраля 2020

Я попробовал модуль подпроцесса, но предоставил основную функцию C со строковыми значениями, но, похоже, у меня не работает. В Интернете есть определенные решения, но мне сложно понять и реализовать их. Мы будем благодарны за любую помощь.

Я хочу выполнить файл, записанный в C, передавая ему аргументы из моего кода pyhthon, и после того, как этот файл C будет выполнен, я хочу захватить то, что он возвращает в моем python code.

const char* main(int argc , char* argv[]) 
{ 
    printf("Hello World from C \n"); 
    printf("1st string passed is %s \n ",argv[1]);
    printf("2nd string passed is %s \n ", argv[2]);
    char b[] = "success";
    return b; 
} 

Это код в C, откуда я sh возвращает строку в код python.

import subprocess 
import os 

def excuteC(): 

    s = subprocess.call("./Cvishad hello you;", shell = True)
    print("status is "+ str(s))


if __name__=="__main__": 
    excuteC()  

Это код в python, где я звоню код C. Кажется, это работает, но я думаю, что он возвращает указатель / адрес, но не фактическую строку "success", которую я хочу. Вывод, который я получаю, выглядит примерно так:

Hello World from C
1st string passed is hello 
2nd string passed is you 
status is 80

Я впервые пробую что-то в C, поэтому прошу прощения за глупые ошибки.

1 Ответ

0 голосов
/ 18 февраля 2020

Ваша C программа возвращает указатель на строку в качестве возвращаемого значения процесса, и она усекается до байта без знака (который вы видите, например, как 80).

Вы можете передать произвольный данные между процессами, например (и я уверен, что я что-то забыл)

  • сокеты
  • файлы
  • потоков (stdout / stderr; subprocess.check_output() в Python)
  • общая память
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...