Skip to content
  • Categories
  • Recent
  • Tags
  • Popular
  • Users
  • Groups
  • Search
  • Get Qt Extensions
  • Unsolved
Collapse
Brand Logo
  1. Home
  2. Qt Development
  3. General and Desktop
  4. How we can run Linux command from qt code?
Forum Updated to NodeBB v4.3 + New Features

How we can run Linux command from qt code?

Scheduled Pinned Locked Moved Unsolved General and Desktop
21 Posts 4 Posters 2.5k Views
  • Oldest to Newest
  • Newest to Oldest
  • Most Votes
Reply
  • Reply as topic
Log in to reply
This topic has been deleted. Only users with topic management privileges can see it.
  • WaseeW Offline
    WaseeW Offline
    Wasee
    wrote on last edited by
    #7

    @jsulm thanks;
    kindly give me any suitable example QFile device read.
    thanks

    jsulmJ JonBJ 2 Replies Last reply
    0
    • WaseeW Wasee

      @jsulm thanks;
      kindly give me any suitable example QFile device read.
      thanks

      jsulmJ Offline
      jsulmJ Offline
      jsulm
      Lifetime Qt Champion
      wrote on last edited by
      #8

      @Wasee said in How we can run Linux command from qt code?:

      kindly give me any suitable example QFile device read

      What example?
      These device files are files, so you read/write them like any other files...

      1 Reply Last reply
      4
      • WaseeW Wasee

        @jsulm thanks;
        kindly give me any suitable example QFile device read.
        thanks

        JonBJ Offline
        JonBJ Offline
        JonB
        wrote on last edited by JonB
        #9

        @Wasee
        To answer your original question: the code you showed in your first example should do exactly what you say you want it to do --- provided you have first typed that command into a bash shell to verify it works correctly. So how do you know "it is not executing my command"? There is no need to run it startDetached() instead of plain start(). You could then capture any error and anything written to stdout/stderr ot check for anything unexpected. [Note: your literal string has \: in it. That is not right for C++. Either \\: or just simple :. Maybe that is why it had problems.]

        However, as @jsulm said this command simple writes a string to a file. So no need for a QProcess, what is wrong with:

        QFile f("/sys/bus/iio/devices/iio:device1/out_altvoltage1_TX_LO_frequency");
        if (f.open(QIODevice::WriteOnly))
        {
            qint64 count = f.write("24250000");
            Q_ASSERT(count > 0);
            f.close();
        }
        
        WaseeW 2 Replies Last reply
        5
        • JonBJ JonB

          @Wasee
          To answer your original question: the code you showed in your first example should do exactly what you say you want it to do --- provided you have first typed that command into a bash shell to verify it works correctly. So how do you know "it is not executing my command"? There is no need to run it startDetached() instead of plain start(). You could then capture any error and anything written to stdout/stderr ot check for anything unexpected. [Note: your literal string has \: in it. That is not right for C++. Either \\: or just simple :. Maybe that is why it had problems.]

          However, as @jsulm said this command simple writes a string to a file. So no need for a QProcess, what is wrong with:

          QFile f("/sys/bus/iio/devices/iio:device1/out_altvoltage1_TX_LO_frequency");
          if (f.open(QIODevice::WriteOnly))
          {
              qint64 count = f.write("24250000");
              Q_ASSERT(count > 0);
              f.close();
          }
          
          WaseeW Offline
          WaseeW Offline
          Wasee
          wrote on last edited by
          #10

          @JonB Hi;
          I coded as you suggested above but still not changing TX_LO_frequency value. why?
          thanks

          jsulmJ JonBJ 3 Replies Last reply
          0
          • WaseeW Wasee

            @JonB Hi;
            I coded as you suggested above but still not changing TX_LO_frequency value. why?
            thanks

            jsulmJ Offline
            jsulmJ Offline
            jsulm
            Lifetime Qt Champion
            wrote on last edited by
            #11

            @Wasee Did you do what @JonB mentioned: "provided you have first typed that command into a bash shell to verify it works correctly"?
            So, does it work if you do it in terminal?

            1 Reply Last reply
            1
            • WaseeW Wasee

              @JonB Hi;
              I coded as you suggested above but still not changing TX_LO_frequency value. why?
              thanks

              jsulmJ Offline
              jsulmJ Offline
              jsulm
              Lifetime Qt Champion
              wrote on last edited by
              #12
              This post is deleted!
              1 Reply Last reply
              0
              • WaseeW Wasee

                @JonB Hi;
                I coded as you suggested above but still not changing TX_LO_frequency value. why?
                thanks

                JonBJ Offline
                JonBJ Offline
                JonB
                wrote on last edited by JonB
                #13

                @Wasee said in How we can run Linux command from qt code?:

                but still not changing TX_LO_frequency value. why?

                Did you even at least check the return result of the open() for yourself? For all I know you do not have permission to write to that file. This is part of what doing development involves....

                @jsulm

                Also I would not write a string but a number:

                That's fine, but it's not what the OP's echo 24250000 > out_altvoltage1_TX_LO_frequency would do (treat anything as a number), which I was trying to copy. In fact I think Linux echo will append a newline, so the OP may need to do that too.

                1 Reply Last reply
                2
                • WaseeW Offline
                  WaseeW Offline
                  Wasee
                  wrote on last edited by
                  #14

                  @JonB said in How we can run Linux command from qt code?:
                  echo 24250000 > out_altvoltage1_TX_LO_frequency this command run in terminal and change the value on device. But not changing from qt code.

                  jsulmJ 1 Reply Last reply
                  0
                  • WaseeW Wasee

                    @JonB said in How we can run Linux command from qt code?:
                    echo 24250000 > out_altvoltage1_TX_LO_frequency this command run in terminal and change the value on device. But not changing from qt code.

                    jsulmJ Offline
                    jsulmJ Offline
                    jsulm
                    Lifetime Qt Champion
                    wrote on last edited by
                    #15

                    @Wasee said in How we can run Linux command from qt code?:

                    change the value on device

                    Without sudo?

                    Please add error handling to your code: print error message if f.open(...) fails.

                    WaseeW 1 Reply Last reply
                    0
                    • jsulmJ jsulm

                      @Wasee said in How we can run Linux command from qt code?:

                      change the value on device

                      Without sudo?

                      Please add error handling to your code: print error message if f.open(...) fails.

                      WaseeW Offline
                      WaseeW Offline
                      Wasee
                      wrote on last edited by
                      #16

                      @jsulm Hi;
                      Yes without sudo in terminal its changing value. No error of device open its not returning.
                      thanks

                      JonBJ 1 Reply Last reply
                      0
                      • WaseeW Wasee

                        @jsulm Hi;
                        Yes without sudo in terminal its changing value. No error of device open its not returning.
                        thanks

                        JonBJ Offline
                        JonBJ Offline
                        JonB
                        wrote on last edited by
                        #17

                        @Wasee

                        • Did you add the error checking code I advised?
                        • Did you try appending the newline I advised?
                        1 Reply Last reply
                        0
                        • JonBJ JonB

                          @Wasee
                          To answer your original question: the code you showed in your first example should do exactly what you say you want it to do --- provided you have first typed that command into a bash shell to verify it works correctly. So how do you know "it is not executing my command"? There is no need to run it startDetached() instead of plain start(). You could then capture any error and anything written to stdout/stderr ot check for anything unexpected. [Note: your literal string has \: in it. That is not right for C++. Either \\: or just simple :. Maybe that is why it had problems.]

                          However, as @jsulm said this command simple writes a string to a file. So no need for a QProcess, what is wrong with:

                          QFile f("/sys/bus/iio/devices/iio:device1/out_altvoltage1_TX_LO_frequency");
                          if (f.open(QIODevice::WriteOnly))
                          {
                              qint64 count = f.write("24250000");
                              Q_ASSERT(count > 0);
                              f.close();
                          }
                          
                          WaseeW Offline
                          WaseeW Offline
                          Wasee
                          wrote on last edited by
                          #18

                          @JonB said in How we can run Linux command from qt code?:

                          QFile f("/sys/bus/iio/devices/iio:device1/out_altvoltage1_TX_LO_frequency");
                          if (f.open(QIODevice::WriteOnly))
                          {
                          qint64 count = f.write("24250000");
                          Q_ASSERT(count > 0);
                          f.close();
                          }

                          how I can pass variable instead of 24250000.

                          1 Reply Last reply
                          0
                          • WaseeW Offline
                            WaseeW Offline
                            Wasee
                            wrote on last edited by
                            #19

                            @JonB Thanks for your appreciated help!
                            Your suggestion of QFile is working fine now.

                            QFile f("/sys/bus/iio/devices/iio:device1/out_altvoltage1_TX_LO_frequency");
                            if (f.open(QIODevice::WriteOnly))
                            {
                                qint64 count = f.write("2425000000");
                                Q_ASSERT(count > 0);
                                f.close();
                            }
                            

                            The value 2425000000 is coming from a variable which can be change any time. I need to pass this value as a variable instead of constant 2425000000.
                            thanks

                            KroMignonK JonBJ 2 Replies Last reply
                            0
                            • WaseeW Wasee

                              @JonB Thanks for your appreciated help!
                              Your suggestion of QFile is working fine now.

                              QFile f("/sys/bus/iio/devices/iio:device1/out_altvoltage1_TX_LO_frequency");
                              if (f.open(QIODevice::WriteOnly))
                              {
                                  qint64 count = f.write("2425000000");
                                  Q_ASSERT(count > 0);
                                  f.close();
                              }
                              

                              The value 2425000000 is coming from a variable which can be change any time. I need to pass this value as a variable instead of constant 2425000000.
                              thanks

                              KroMignonK Offline
                              KroMignonK Offline
                              KroMignon
                              wrote on last edited by
                              #20

                              @Wasee said in How we can run Linux command from qt code?:

                              The value 2425000000 is coming from a variable which can be change any time. I need to pass this value as a variable instead of constant 2425000000.
                              thanks

                              Are you joking???
                              Do you really don't have any idea how to do this simple stuff?
                              It is so complicated to create a string and write it to a file?
                              What did you try to do?

                              It is an old maxim of mine that when you have excluded the impossible, whatever remains, however improbable, must be the truth. (Sherlock Holmes)

                              1 Reply Last reply
                              0
                              • WaseeW Wasee

                                @JonB Thanks for your appreciated help!
                                Your suggestion of QFile is working fine now.

                                QFile f("/sys/bus/iio/devices/iio:device1/out_altvoltage1_TX_LO_frequency");
                                if (f.open(QIODevice::WriteOnly))
                                {
                                    qint64 count = f.write("2425000000");
                                    Q_ASSERT(count > 0);
                                    f.close();
                                }
                                

                                The value 2425000000 is coming from a variable which can be change any time. I need to pass this value as a variable instead of constant 2425000000.
                                thanks

                                JonBJ Offline
                                JonBJ Offline
                                JonB
                                wrote on last edited by
                                #21

                                @Wasee
                                You must convert your (integer) variable to a string. QIODevice::write() accepts either a const char * or a const QByteArray & for the string to write. You can use either QString::number() or QByteArray::number() to convert a number to a string/byte array to pass to write(), as you please.

                                1 Reply Last reply
                                1

                                • Login

                                • Login or register to search.
                                • First post
                                  Last post
                                0
                                • Categories
                                • Recent
                                • Tags
                                • Popular
                                • Users
                                • Groups
                                • Search
                                • Get Qt Extensions
                                • Unsolved